首页 > 解决方案 > 小部件的初始化以意想不到的方式工作

问题描述

有一个简单的 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 小部件时初始化没有初始化它?

标签: flutter

解决方案


请试试这个!

_getIsSwitched().then((value) { // gets it from preferences
     setState(() {
      _isSwitched = value;
      print('_isSwitched was $_isSwitched');
      });
    });

推荐阅读