【问题标题】:How do you initialize a field in the State of a StatefulWidget in Flutter?如何在 Flutter 中初始化 StatefulWidget 的 State 中的字段?
【发布时间】:2020-07-19 20:08:29
【问题描述】:

我有类似的情况,其中小部件的颜色取决于布尔值,当您点击小部件时,布尔值会翻转。但我也想初始化 bool,对于不同的小部件实例,它会有所不同。我尝试了这样的方法,其中StatefulWidget 类包含初始值initBool,在initState 中用于设置myBool

它似乎有效(但老实说,我不确定,因为我遇到了一个奇怪的错误,但我不知道它是否相关),但感觉有点笨拙,所以我想知道是否在 Flutter 中有更合适的方法来做到这一点。谢谢!

class MyBox extends StatefulWidget {
  final bool initBool;
  
  MyBox(this.initBool);
  @override
  _MyBoxState createState() => _MyBoxState();
}

class _MyBoxState extends State<MyBox> {
  bool myBool;

  @override
  void initState() {
    super.initState();
    myBool = widget.initBool;
  }

  @override
  Widget build(BuildContext context) {
    return InkWell(
      child: Container(
          color: myBool ? Colors.green : Colors.red
      ),
      onTap: () {
        setState(() {
          myBool = !myBool;
        });
      },
    );
  }
}

【问题讨论】:

  • 您目前拥有的有什么问题?
  • @ChristopherMoore 只为初始值设置一个单独的变量感觉有点粗略,所以我想咨询更有经验的 Flutter 用户,看看在使用时是否有基于最佳实践的更好方法StatefulWidget。
  • 你目前拥有的一切都很好。

标签: flutter dart


【解决方案1】:

这是 WidgetsBinding 的完美案例

super.initState(); 之后执行此操作:

WidgetsBinding.instance.addPostFrameCallback((_) {
  setState(() {
    myBool = widget.initBool;
  });
});

这是允许您在初始化后直接设置状态的地方。

【讨论】:

    猜你喜欢
    • 2021-11-17
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    相关资源
    最近更新 更多