什么时候调用StatefulWidget的init方法?

时间:2019-02-04 22:14:48

标签: dart flutter

当调用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}}方法?

1 个答案:

答案 0 :(得分:3)

initState的{​​{1}}一生仅被调用一次(基本上直到调用State为止)。

所以简短的答案是:dispose和创建initState的构造函数就被调用了。


长话短说,有几种方法可以告诉框架State实例应替换为新实例。

更新State时,Flutter内部检查两件事:

  • StatefulWidget
  • widget.runtimeType

如果其中任何一个与先前的小部件都不匹配,则意味着我们要卸载旧的小部件并重新安装新的小部件。

这样,在build方法中为小部件分配widget.key会导致其后代始终破坏并重新创建其UniqueKey

State