三种情况:第一种情况:隐式动画,全自动动画(属于内部封装好了,只需要几行代码,就可以实现非常强大的效果)第二种情况:显示动画,手动控制的动画(提供自定义选择,更灵活的来完成所有苛刻动画需求 等)第三种情况:其他动画(【 做一个动画需求: (此需求的动画,是不是会一直循环,是一直循环,无法停止下来的动画)true一定要要求,美工提供素材,有素材后,有素材:就可以 嵌入到动画框架, 例如:Rive,Flare,Lottie ...无素材:可以自己用 线条和多边形画出来,然后操作底层CustomPainter 】【 做一个 适合动画控件 的 需求 (循环重播,随时中断,多方控制协调 ...)1.(循环重播,随时中断,多方控制协调) 等需求的动画,就可以使用【全自动动画-隐式】全自动动画(隐式动画:AnimatedXXX, 自定义隐式动画:TweenAnimatedBuilder)2.(循环重播,随时中断,多方控制协调) 等需求的动画,就可以使用【全自动动画-显示】手动控制动画(显示动画:XXXTransition, 自定义显示动画:AnimatedBuilder)3.若实在无法达到需求:可以考虑 直接操作底层的 CustomPainter 】
大致的原理步骤:
1. 都是使用 _controller 控制器来完成的---- VSync(垂直同步信号),和手机的刷新率
2.animation: _controller, 监听 控制器
3.一旦控制器有值,就会驱动执行,builder区域的代码,进行渲染。
4.增量更新widget
----》最终都会去调用——handleChange()
void _handleChange() {setState(() {// The listenable's state is our build state, and it changed already.}); }