我知道在AnimationController
上有repeat()
方法,但它总是从开头开始。
是否有内置的方法可以执行一次正向动画和一次反向动画,并且重复执行?
谢谢
你可以使用addStatusListener
来监听动画的状态。并在动画结束时将其反转。
final AnimationController c;
...
c.addStatusListener((status) {
if (status == AnimationStatus.completed) {
c.reverse();
}
else if (status == AnimationStatus.dismissed) {
c.forward();
}
});
我有一个更简单的解决方案,使用simple_animations包中的MirrorAnimation小部件。
使用它,您甚至不需要创建AnimationController。还有一个LoopAnimation小部件,可以在一个方向上连续运行动画。
return MirrorAnimation(
builder: (context, child, double value) {
return Transform.rotate(
angle: pi * value,
child: const Icon(Icons.notifications),
);
},
duration: const Duration(seconds: 1),
tween: Tween<double>(begin: 0, end: 2),
);
[ TweenSequenceItem(tween: Tween(begin: 1.0, end: 1 - dynamicEndVal), weight: 75.0),
TweenSequenceItem(tween: Tween(begin: 1 - dynamicEndVal, end: 1.0), weight: 25.0),
]
- user5381191