我的应用程序中的一个屏幕有三个按钮。当屏幕加载时,我试图让以下序列发生:
- 窗口小部件加载
- 按钮1动画
- 停顿
- 按钮2动画
- 停顿
- 按钮3动画
每个按钮都是它自己的小部件,有自己的AnimationController和playAnimation()函数。我尝试了多种方法,但都无法实现。
如果我使用小部件绑定.示例. addPostFrameCallback():
@override
void initState() {
...
WidgetsBinding.instance.addPostFrameCallback((_) {
button1.playAnimation();
sleep(const Duration(milliseconds: 1000));
button2.playAnimation();
sleep(const Duration(milliseconds: 1000));
button3.playAnimation();
});
...
}
我得到:
- 空白屏幕
- 2秒暂停
- 窗口小部件加载
- 所有动画播放在同一时间
如果我把打印语句,我可以看到应用程序循环通过按钮按下在空白屏幕上。
如果我使用FutureBuilder():
@override
Widget build(BuildContext context) {
...
return FutureBuilder(
future: Future.delayed(Duration(seconds: 5), () {
button1.playAnimation();
sleep(const Duration(milliseconds: 1000));
button2.playAnimation();
sleep(const Duration(milliseconds: 1000));
button3.playAnimation();
}),
...
);
}
我得到:
- 窗口小部件加载
- 所有动画播放在同一时间
看起来FutureBuilder方法"更接近"解决方案。但是,我找不到任何关于如何让多个动画控制器像这样按顺序运行的东西。据我所知,交错动画只能在单个控制器/小部件上工作。
有什么想法如何完成这一点吗?谢谢你的帮助。
1条答案
按热度按时间swvgeqrz1#
U可以通过将一个控制器的持续时间间隔划分为多个动画序列来完成此操作。
Check this video
My Code sample