gpt4 book ai didi

dart - StatefulWidget的init方法什么时候调用

转载 作者:IT王子 更新时间:2023-10-29 06:38:11 24 4
gpt4 key购买 nike

我很难理解何时调用 State 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 被调用。这个观察是否正确?为什么会发生这种情况,我怎么知道什么时候 B 和 C 不会被调用? FooWidgetStateinit 方法什么时候会被再次调用?

最佳答案

StateinitState 在其整个生命周期中只被调用一次(基本上直到 dispose 被调用)。

所以简短的回答是:initState 每当创建 State 时都会调用构造函数,仅此而已。


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

StatefulWidget 更新时,Flutter 会在内部检查两件事:

  • widget.runtimeType
  • widget.key

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

因此,在构建方法中将 UniqueKey 分配给小部件将导致其后代始终销毁并重新创建它们的 State:

Widget build(BuildContext context) {
return SomeStatefulWidget(
key: UniqueKey(),
);
}

关于dart - StatefulWidget的init方法什么时候调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54525124/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com