2

Flutter 的口头禅之一是小部件是不可变的,并且可以随时重新构建。StatefulWidget 的一个原因是伴随的 State 对象,它“徘徊”在任何单独的build()方法调用之外。这样,当小部件本身被重建时,文本值、复选框选择可以保持不变。

但是,国家对象本身何时被销毁?是当它们关联的小部件从小部件树中删除时?在什么情况下会发生这种情况——当使用导航器访问新的小部件时?当您转到 TabBar 中的不同条目时?

这对我来说有点模糊,实际上从小部件树中删除小部件并且它们的关联状态被破坏的场景。我还需要注意哪些其他情况下我的状态对象可能会消失,以便我可以使用 PageStorageKeys 等采取适当的措施?

4

2 回答 2

7

一般的答案是:当它的关联元素(BuildContext 对象)在从元素树中删除后被释放时。

请注意,一个元素(因此也是一个小部件)不能将自己从树中删除。它必须是它的父级删除它。

大多数情况下,这取决于其父级的构建方法所做的事情。

主要有两种情况:

  • build 方法返回了一个不同的小部件树。通常来自:
return Foo();

到:

return Bar();

将破坏 的状态Foo

Foo请注意, “移动”时也会发生这种情况:

return Foo();

到:

return Bar(child: Foo());

仍将处置. _Foo

  • 第二种情况是Key变化时:
return Foo();

进入:

return Foo(key: Key("foo")) ;

或者:

return Foo(key: Key("bar"));

进入:

return Foo(key: Key("foo")) ;

都会破坏之前创建的状态Foo

于 2019-08-01T07:46:25.880 回答
0

处置方法

@override
dispose()
于 2019-08-01T08:24:44.340 回答