我认为我理解所有其他的 StatefulWidget
生命周期回调方法,但是didUpdateWidget
是我从未使用过的一个,也无法想到一个特定的用例,因为我只是在build
中使用widget
getter获取关于Widget
的信息。
那么在哪些情况下使用didUpdateWidget
是有用且需要使用的呢?
我认为我理解所有其他的 StatefulWidget
生命周期回调方法,但是didUpdateWidget
是我从未使用过的一个,也无法想到一个特定的用例,因为我只是在build
中使用widget
getter获取关于Widget
的信息。
那么在哪些情况下使用didUpdateWidget
是有用且需要使用的呢?
didUpdateWidget
函数用于当您想要在有状态的小部件的参数更改时触发副作用时使用。
一个典型的用例是隐式动画小部件。它们使用didUpateWidget
函数实现,如下所示:
@override
void didUpdateWidget(MyWidget oldWidget) {
super.didUpdateWidget(oldWidget);
if (widget.value != oldWidget.value) {
// TODO: start a transition between the previous and new value
}
}
Flutter文档中实现didUpdateWidget
的示例可以在AnimationController docs中找到:
@override
void didUpdateWidget(Foo oldWidget) {
super.didUpdateWidget(oldWidget);
_controller.duration = widget.duration;
}
didUpdateWidget
中,动画控制器的持续时间(动画剩余时间)会被替换/更新为Widget的State
的持续时间。Foo
以新的持续时间重建时,动画控制器会用这个值更新,而不是固定在原始widget.duration
中设置的持续时间(即在initState
中设置的持续时间)。didUpdateWidget
在Widget重建时更新State
。