当被调用称为StatefulWidget的init方法

问题描述 投票:2回答:1

我有一个艰难的时间了解当一个国家的Widget的init方法被调用。

假设我有下面的Widget

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是called.Is这个观察是否正确?为什么会这样?我怎么知道什么时候B和C不会被调用?当将initFooWidgetState方法再次调用?

dart flutter
1个回答
3
投票

一个initStateState只调用一次为它的整个生命(基本上,直到dispose被调用)。

所以,简单的答案是:只要创建一个initState State和构造被称为,仅此而已。


长的故事是,有一些方法来告诉大家,State实例应该用一个新的来代替框架。

StatefulWidget更新后,扑在内部检查两件事情:

  • widget.runtimeType
  • widget.key

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

因此,分配UniqueKey到构建方法中的小部件会导致其后代永远摧毁和重建他们State

Widget build(BuildContext context) {
  return SomeStatefulWidget(
    key: UniqueKey(),
  );
}
© www.soinside.com 2019 - 2024. All rights reserved.