Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何在flatter中以StatefulWidget的状态初始化字段?_Flutter_Dart - Fatal编程技术网

Flutter 如何在flatter中以StatefulWidget的状态初始化字段?

Flutter 如何在flatter中以StatefulWidget的状态初始化字段?,flutter,dart,Flutter,Dart,我有类似这样的东西,小部件的颜色取决于bool,当你点击小部件时bool会翻转。但是我还想初始化bool,这对于小部件的不同实例是不同的。我尝试过这样的方法,其中StatefulWidget类包含初始值initBool,它在initState中用于设置myBool 这似乎有效,但老实说,我不确定,因为我得到了一个奇怪的错误,但我不知道它是否相关,但它只是觉得有点笨重,所以我想知道是否有一个更合适的方式来做这在颤振。谢谢 class MyBox extends StatefulWidget {

我有类似这样的东西,小部件的颜色取决于bool,当你点击小部件时bool会翻转。但是我还想初始化bool,这对于小部件的不同实例是不同的。我尝试过这样的方法,其中StatefulWidget类包含初始值initBool,它在initState中用于设置myBool

这似乎有效,但老实说,我不确定,因为我得到了一个奇怪的错误,但我不知道它是否相关,但它只是觉得有点笨重,所以我想知道是否有一个更合适的方式来做这在颤振。谢谢

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;
        });
      },
    );
  }
}


这是WidgetsBinding的完美案例

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


这是允许您在init之后直接设置状态的地方。

您当前的状态有什么问题?@christophermore只为初始值设置一个单独的变量感觉有点粗略,因此,我想与更有经验的Flatter用户核实一下,看看在使用StatefulWidget时,是否有一种基于最佳实践的更好方法。您目前拥有的是非常好的。请对此答案添加一些解释。不清楚。是的,但我相信我有MyBoxthis.initBool;所以我在实例化MyBox时设置了initBool,它不会为null。@tensixes initBool肯定会为null,除非您使用null-safe-dart。但是,只要你确保你通过了一些东西,那就不是问题。请回答我对您的问题的评论。MyBoxthis.initBool;到MyBox{this.initBool}@瓦利坎:为什么你认为应该改变?
 import 'package:flutter/material.dart';

 final Color darkBlue = Color.fromARGB(255, 18, 32, 47);

 void main() {
  runApp(MyApp());
  }

  class MyApp extends StatelessWidget {
  @override
   Widget build(BuildContext context) {
   return MaterialApp(
    theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
    debugShowCheckedModeBanner: false,
     home: Scaffold(
      body: Center(
      child: MyBox(initBool: true,),
       ),
     ),
     );
     }
     }

   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;
       });
      },
  );
    }
  }
WidgetsBinding.instance.addPostFrameCallback((_) {
  setState(() {
    myBool = widget.initBool;
  });
});