当调用State Widget的init方法时,我很难理解。
假设我有以下小部件
class FooWidget extends StatefulWidget
{
FooWidget(this._title)
{
//----------->A
}
String _title;
@override
FooWidgetState createState() => new FooWidgetState();
}
class FooWidgetState extends State<FooWidget>
{
FooWidgetState(); //----------->B
@override
void initState() {
super.initState(); //----------->C
}
@override
Widget build(BuildContext context)
{
//------>D
}
我注意到第一次创建FooWidget
时,都调用了A,B,C,D。但是,当FooWidget
的父级重建时,仅调用A和D。这种观察正确吗?为什么会发生这种情况,我怎么知道何时不调用B和C?什么时候会再次调用init
的{{1}}方法?
答案 0 :(得分:3)
initState
的{{1}}一生仅被调用一次(基本上直到调用State
为止)。
所以简短的答案是:dispose
和创建initState
的构造函数就被调用了。
长话短说,有几种方法可以告诉框架State
实例应替换为新实例。
更新State
时,Flutter内部检查两件事:
StatefulWidget
widget.runtimeType
如果其中任何一个与先前的小部件都不匹配,则意味着我们要卸载旧的小部件并重新安装新的小部件。
这样,在build方法中为小部件分配widget.key
会导致其后代始终破坏并重新创建其UniqueKey
:
State