何时使用didUpdateWidget示例

21

我认为我理解所有其他的 StatefulWidget 生命周期回调方法,但是didUpdateWidget是我从未使用过的一个,也无法想到一个特定的用例,因为我只是在build中使用widget getter获取关于Widget的信息。

那么在哪些情况下使用didUpdateWidget是有用且需要使用的呢?

2个回答

32

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
  }
}

1
确实很难理解正在发生什么。但最终,这在某种程度上帮助我解决了一个与状态相关的副作用问题,这个问题让我忙碌了两周。 - CEO tech4lifeapps

3

Flutter文档中实现didUpdateWidget的示例可以在AnimationController docs中找到:

  @override
  void didUpdateWidget(Foo oldWidget) {
    super.didUpdateWidget(oldWidget);
    _controller.duration = widget.duration;
  }

didUpdateWidget中,动画控制器的持续时间(动画剩余时间)会被替换/更新为Widget的State的持续时间。
或者从文档本身来看:
“控制器的持续时间是通过Foo widget中的一个属性进行配置的;随着其更改,将使用State.didUpdateWidget方法来更新控制器。”
我想这意味着当Foo以新的持续时间重建时,动画控制器会用这个值更新,而不是固定在原始widget.duration中设置的持续时间(即在initState中设置的持续时间)。
简而言之:您可以使用didUpdateWidget在Widget重建时更新State

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接