Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.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 颤振如何确定何时重建小部件?_Flutter_Build_Widget_Element - Fatal编程技术网

Flutter 颤振如何确定何时重建小部件?

Flutter 颤振如何确定何时重建小部件?,flutter,build,widget,element,Flutter,Build,Widget,Element,请看下面的代码片段 类MyHomePage扩展StatefulWidget{ @凌驾 _MyHomePageState createState()=>\u MyHomePageState(); } 类_MyHomePageState扩展状态{ 最终子项=CustomTextWidget(); @凌驾 小部件构建(构建上下文){ 返回脚手架( appBar:appBar(), 正文:中( 孩子:升起按钮( child:child,//CustomTextWidget(), 已按下:(){ setS

请看下面的代码片段

类MyHomePage扩展StatefulWidget{
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
最终子项=CustomTextWidget();
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(),
正文:中(
孩子:升起按钮(
child:child,//CustomTextWidget(),
已按下:(){
setState((){});
}
),
),
);
}
}
类CustomTextWidget扩展了无状态Widget{
CustomTextWidget(){
打印(“构造”);
}
@凌驾
小部件构建(构建上下文){
印刷(“建成”);
返回文本(“单击我”);
}
}
我可以理解为什么在下面的代码中,每次构建都会调用
CustomTextWidget
的构造函数和构建方法。这是因为我每次都给一个新的对象

RaisedButton(
子项:CustomTextWidget(),
已按下:(){
setState((){});
}
),
但是为什么如果我给它
child
的话,
CustomTextWidget
对象的构建方法不会在每次构建时都被调用呢?构造函数被调用一次,这是有意义的,然后构建方法被调用一次。为什么不使用每个
setState
调用build

RaisedButton(
孩子:孩子,
已按下:(){
setState((){});
}
),
颤振如何决定何时调用这些构建方法

 RaisedButton(
    child: child,
    onPressed: () {
      setState(() {});
      }
  ),

未调用
build
,因为对象未更改。颤振必须使用相等运算符
==
来确定调用
setState
时小部件/对象是否发生了更改。如果值为
false,则不调用构建。在有状态和无状态小部件中都是如此。因此,这里的要点是尽可能始终使用
const
,如果不希望重新生成小部件,则在重新生成上下文之外声明它们

请记住,对于
StatefulWidget
s,关于元素树持有的
State
对象何时被重新创建还有另一个概念,在这方面,flatter查看
StatefulWidget
的类型以及
键来确定是否应该重新创建
State
对象

我希望这能帮助其他人

在这个例子中,干杯

 RaisedButton(
    child: child,
    onPressed: () {
      setState(() {});
      }
  ),

未调用
build
,因为对象未更改。颤振必须使用相等运算符
==
来确定调用
setState
时小部件/对象是否发生了更改。如果值为
false,则不调用构建。在有状态和无状态小部件中都是如此。因此,这里的要点是尽可能始终使用
const
,如果不希望重新生成小部件,则在重新生成上下文之外声明它们

请记住,对于
StatefulWidget
s,关于元素树持有的
State
对象何时被重新创建还有另一个概念,在这方面,flatter查看
StatefulWidget
的类型以及
键来确定是否应该重新创建
State
对象

我希望这能帮助其他人


干杯

如果有人能提供一个链接,详细解释颤振构建算法,那就太好了。这可能与您将孩子存储在一个状态有关,该状态附加到一个元素,而不是一个小部件。小部件总是被重建的,这些类基本上就是我们——程序员——看到的,每次父调用setstate或依赖的继承小部件更改时,它们都被重建,然后这些小部件通过类名和/或键与元素相关联,元素代表框架实际呈现的内容。当你在编程时,这是一个很好的想象方式。你可以在互联网上阅读更多内容:如果有人能提供一个链接,详细解释颤振构建算法,那就太好了。这可能与你将你的孩子存储在一个状态有关,这个状态是附加到一个元素上的,而不是一个小部件。小部件总是被重建的,这些类基本上就是我们——程序员——看到的,每次父调用setstate或依赖的继承小部件更改时,它们都被重建,然后这些小部件通过类名和/或键与元素相关联,元素代表框架实际呈现的内容。当你在编程时,这是一个很好的想象方式。你可以在互联网上阅读更多内容: