Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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
Dart 为什么直接变异变量会重建小部件?_Dart_Flutter - Fatal编程技术网

Dart 为什么直接变异变量会重建小部件?

Dart 为什么直接变异变量会重建小部件?,dart,flutter,Dart,Flutter,请运行此小部件: class MyWidget extends StatefulWidget { @override _MyWidgetState createState() => _MyWidgetState(); } class _MyWidgetState extends State<MyWidget> { bool aBoolean = false; @override Widget build(BuildContext context) {

请运行此小部件:

class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
    bool aBoolean = false;
  @override
  Widget build(BuildContext context) {
    print('aBoolean will change over press button: $aBoolean');
    return RaisedButton(
        onPressed: () {
            aBoolean = !aBoolean;
        },
        child: const Text("Press Me"),
    );
  }
}
类MyWidget扩展了StatefulWidget{
@凌驾
_MyWidgetState createState()=>\u MyWidgetState();
}
类_MyWidgetState扩展状态{
bool-aBoolean=假;
@凌驾
小部件构建(构建上下文){
打印('aBoolean将在按下按钮时发生变化:$aBoolean');
返回上升按钮(
已按下:(){
aBoolean=!aBoolean;
},
子:常量文本(“按我”),
);
}
}

变量
aBoolean
将在每次按下按钮时更改。。这是否意味着直接变异变量将重建小部件。。?那么,
setState({})
的作用是什么呢。。?我应该直接修改变量还是使用setState.?

除非调用
setState
(除了少数例外),否则小部件不会重新生成

因此,调用
setState
不是可选的

如果只直接更改状态而不调用setState,框架可能不会计划生成,并且此子树的用户界面可能不会更新以反映新状态

资料来源:

它可以在不调用setState的情况下重建,但正如文档所示,它在下一个场景中可能无法工作。最好使用
setState方法变异state

“为什么直接变异变量会重建小部件?”
-不,它不会重建小部件:为此,您必须调用
setState()