更新子传递到有状态小部件

时间:2020-12-20 10:52:11

标签: flutter dart flutter-animation

嗨,我有一个名为 BobButton() 的有状态小部件,它基本上会执行一个动画,按钮在按下时上下摆动。

<块引用>

BobButton 使用 Bobbing 效果为子小部件设置动画(它是有状态的)

我像这样将一个孩子传递给 BobButton

BobButton( //Statefulwidget
  child: Widget(
    color: color,
    controller: animationController,
  )
)

其中一些小部件具有自己的动画或具有在父小部件状态中发生变化的变量。例如,我可能会调用:

setState({
  color = Colors.pink
});

animationController.forward()

但是小部件不会更新,因为子部件已经被传递到有状态小部件 BobButton 中。

我该怎么做才能解决这个问题

1 个答案:

答案 0 :(得分:1)

Widget 中重写方法

@override
didUpdateWidget(Widget oldWidget) {
  super.didUpdateWidget(oldWidget);
  if (widget.color != oldWidget.color) {
    setState(() {
      //  states variables if neccessary
    });
  }
}

AnimationController 是一个 Listenable 所以你可以添加一个监听器。或者尝试检查上面提到的 value 方法中的 didUpdateWidget 更改。