gpt4 book ai didi

dart - Flutter:如何在 Widget 启动时读取首选项?

转载 作者:IT老高 更新时间:2023-10-28 12:31:47 31 4
gpt4 key购买 nike

我一直在尝试阅读 Widget 启动时的首选项,但无法找到解决方案。我希望在 TextField 中显示用户名(他们可以更改)并将其存储在首选项中,以便在他们返回页面时立即显示。

class _MyHomePageState extends State<MyHomePage> {
TextEditingController _controller;
:
:
Future<Null> storeName(String name) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString("name", name);
}

@override
initState() async {
super.initState();
SharedPreferences prefs = await SharedPreferences.getInstance();
_controller = new TextEditingController(text: prefs.getString("name"));
}

@override
Widget build(BuildContext context) {
:
:
return new TextField(
decoration: new InputDecoration(
hintText: "Name (optional)",
),
onChanged: (String str) {
setState(() {
_name = str;
storeName(str);
});
},
controller: _controller,
)
}
}

我得到了在 initState() 上使用异步的想法:
flutter timing problems on stateful widget after API call
但是异步似乎在启动时导致了这个错误:

'package:flutter/src/widgets/framework.dart': Failed assertion: line 967 pos 12: 
'_debugLifecycleState == _StateLifecycle.created': is not true.

我查找了 FutureBuilder 的示例,但似乎找不到与我正在尝试做的类似的任何示例。

最佳答案

我建议不要在 initState() 上使用异步。但是您可以通过将 SharedPreferences 包装在另一个函数中并将其声明为异步来以不同的方式执行此操作。

我修改了你的代码。请检查这是否有效。非常感谢。

修改代码:

class _MyHomePageState extends State<MyHomePage> {
TextEditingController _controller;
String _name;

Future<Null> getSharedPrefs() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
_name = prefs.getString("name");
setState(() {
_controller = new TextEditingController(text: _name);
});
}

@override
void initState() {
super.initState();
_name = "";
getSharedPrefs();
}

@override
Widget build(BuildContext context) {

return new TextField(
decoration: new InputDecoration(
hintText: "Name (optional)",
),
onChanged: (String str) {
setState(() {
_name = str;
storeName(str);
});
},
controller: _controller,
);
}
}

如果这有帮助,请告诉我。谢谢。

关于dart - Flutter:如何在 Widget 启动时读取首选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48286488/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com