flutter - 小部件的初始化以意想不到的方式工作
问题描述
有一个简单的 statefull 小部件(屏幕)
class _SettingsState extends State<Settings> {
bool _isSwitched = false;
@override
void initState() {
super.initState();
print('init state');
_getIsSwitched().then((value) { // gets it from preferences
_isSwitched = value;
print('_isSwitched was $_isSwitched');
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
Switch(
value: _isSwitched, // is not it should be updated here?
onChanged: (value) {
setState(() {
_isSwitched = value;
print(_isSwitched);
_setIsSwitched(_isSwitched); // sets it in preferences
});
},
), ...
问题是初始化工作不如预期。当小部件打开时。我打开了切换器,值保存在首选项中。没关系。
然后我返回上一页并再次打开小部件(实际上是一个屏幕)。然后应该使用来自首选项的值对其进行初始化,是吗?
init 方法打印以下内容
初始化状态 _isSwitched 为真
它应该呈现为打开,但实际上它呈现为关闭。为什么当我第二次打开 Switch 小部件时初始化没有初始化它?
解决方案
请试试这个!
_getIsSwitched().then((value) { // gets it from preferences setState(() { _isSwitched = value; print('_isSwitched was $_isSwitched'); }); });