问题描述
我想按顺序播放 2 个 Lottie 文件,即在一个 Lottie 完成其动画后,它应该播放第二个 Lottie 文件。
我尝试通过向 Lottie 小部件添加 statuslistener
(通过 AnimationController)并在第一个 Lottie 完成其动画后调用资产文件上的 setstate() 来实现此目的。它确实有效,但切换到下一个 Lottie 文件时出现延迟。
void statusListener(AnimationStatus status) {
if (status == AnimationStatus.completed) {
setState(() {
asset = asset2;
});
controller.reset();
controller.forward();
}
}
谁能帮我解决一下? 谢谢。
解决方法
为两个动画定义两个不同的控制器。 然后播放第一个动画并暂时隐藏第二个动画。 第一个动画完成后,通过可见性隐藏它。 例如:
Visibility(
child: Text("Gone"),visible: false,),
更多细节请参考:stackoverflow : how to hide widget programmatically
然后播放第二个动画并隐藏第一个动画。
对于时间延迟,使用 Future.delayed
。
这将在您选择的特定时间后执行代码。
例子 :
假设您的第一个动画在 2 seconds
中完成,那么您将在 2 秒后播放下一个动画,以便您在 2 秒后执行下一行代码。
Future.delayed(const Duration(seconds: 2),() {
setState(() {
_controller.forward();
});
});