📅  最后修改于: 2023-12-03 14:51:44.615000             🧑  作者: Mango
在某些场景下,我们只需要在颤振或者其他动画效果中显示当前的日期,而不需要一直实时更新,可以使用Flutter中的AnimationController
来实现。
AnimationController
,并定义一个时长,例如使用Duration(seconds: 1)
表示1秒钟切换一次。AnimationController _controller;
@override
void initState() {
super.initState();
_controller = AnimationController(
vsync: this,
duration: Duration(seconds: 1),
)..repeat();
}
Animation
,该Animation
的动画值将在每次动画循环中更新,并用于显示当前的日期。Animation<double> _animation;
@override
void initState() {
super.initState();
_controller = AnimationController(
vsync: this,
duration: Duration(seconds: 1),
)..repeat();
_animation = Tween<double>(begin: 0, end: 1).animate(_controller);
}
TickerProviderStateMixin
中的TickerProviderStateMixin
来将自定义的State
混入到SingleTickerProviderStateMixin
中,以便于AnimationController
获取Ticker
并进行更新。class _DateShakeWidgetState extends State<DateShakeWidget>
with SingleTickerProviderStateMixin {
AnimationController _controller;
Animation<double> _animation;
@override
void initState() {
super.initState();
_controller = AnimationController(
vsync: this,
duration: Duration(seconds: 1),
)..repeat();
_animation = Tween<double>(begin: 0, end: 1).animate(_controller);
}
@override
Widget build(BuildContext context) {
return Text(
DateTime.now().toString(),
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 24.0,
color: Colors.black.withOpacity(_animation.value),
),
);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
}
使用AnimationController
和Animation
可以快速实现在动画中显示当前的日期,本例演示的方法可以应用于其他需要在动画中显示固定内容的场景。