lar*_*ryq 1 state flutter statefulwidget
Flutter 的口头禅之一是小部件是不可变的,并且可以在收到通知后立即重建。使用 StatefulWidget 的一个原因是伴随的 State 对象,它在任何单独的build()方法调用之外“徘徊” 。这样,当小部件本身被重建时,文本值、复选框选择可以保持不变。
但是,State 对象本身何时被销毁?是当它们关联的小部件从小部件树中删除时吗?在什么情况下会发生这种情况——当使用导航器转到新小部件时?当您转到 TabBar 中的不同条目时?
对我来说有点模糊,小部件实际上从小部件树中删除并且它们的关联状态被破坏的场景。我还需要注意哪些其他情况,我的 State 对象可能会消失,以便我可以对 PageStorageKeys 等采取适当的措施?
一般的答案是:当它的关联元素(BuildContext 对象)在从元素树中删除后被释放时。
请注意,元素(因此也是小部件)不能从树中删除自己。它有成为其父,消除它。
大多数情况下,这取决于其父级的构建方法的作用。
主要有两种情况:
return Foo();
Run Code Online (Sandbox Code Playgroud)
到:
return Bar();
Run Code Online (Sandbox Code Playgroud)
将破坏 的状态Foo。
请注意,这也会在Foo“移动”时发生:
return Foo();
Run Code Online (Sandbox Code Playgroud)
到:
return Bar(child: Foo());
Run Code Online (Sandbox Code Playgroud)
将依然处置的状态Foo。
Key改变:return Foo();
Run Code Online (Sandbox Code Playgroud)
进入:
return Foo(key: Key("foo")) ;
Run Code Online (Sandbox Code Playgroud)
或者:
return Foo(key: Key("bar"));
Run Code Online (Sandbox Code Playgroud)
进入:
return Foo(key: Key("foo")) ;
Run Code Online (Sandbox Code Playgroud)
都会破坏之前创建的状态Foo。
| 归档时间: |
|
| 查看次数: |
2643 次 |
| 最近记录: |