我的应用程序中已经两次遇到以下问题:
在StatefulWidget
中,我有一个小部件,其中包含动画并另外显示其他动态数据。动画小部件构建完成后触发动画。但是,在播放动画(人物的绘图)之后,我希望将其保持在相同的绘图状态。调用父项StatefulWidget
的{{1}}方法时,应始终重建窗口小部件的其余动态数据。
下面是我尝试实现的简单示例:
build
现在,我对实现状态有两个想法:
1)在class MyStatefulWidget extends StatefulWidget {
MyStatefulWidget({Key key, @required this.data}) : super(key: key);
CustomData data;
@override
State<StatefulWidget> createState() => _MyState();
}
中初始化动画小部件,然后“手动”处理initState()
中的数据更新。
didUpdateWidget()
2)在class _MyState extends State<MyStatefulWidget> {
AnimationWidget _animationWidget;
@override
void initState() {
super.initState();
_animationWidget = AnimationWidget(displayData: widget.data);
// starts the animation when the widget is built (?)
WidgetsBinding.instance
.addPostFrameCallback((_) => _animationWidget.startAnimation());
}
@override
Widget build(BuildContext context) {
return Column(
children: [
_animationWidget,
... // other content
],
... // column size etc.
);
}
@override
void didUpdateWidget(SackenNotebookContent oldWidget) {
super.didUpdateWidget(oldWidget);
if(dataChanged(oldWidget.data, widget.data))
setState(() {
_animationWidget = AnimationWidget(displayData: widget.data);
});
}
}
方法中创建动画小部件。但是那时我已经对何时何地触发动画开始感到怀疑。一种方法是在build()
中触发它。但同样,动画将在每次重新构建小部件时触发...
didUpdateWidget()
有没有人知道我该如何应对此类问题?