flutter动画可以分为两种:1.flutter自带的动画过渡组件,也称隐式动画组件;
2.自定义widget动画;其中1是官方提供的动画

1.不需要对动画原理有太多的理解,直接使用,这些widget继承至ImplicitlyAnimatedWidget,下面逐一介绍
1.1 AnimatedContainer
正如源码里说的那样

The [AnimatedContainer] will automatically animate between the old and new values of properties when they change using the provided curve and duration. Properties that are null are not animated. Its child and descendants are not animated.

这是一个支持动画功能的Container,当属性值发生变化时,属性将自动从旧值移动到新值,child没有动画。
支持的属性如下:

 AnimatedContainer(
            width: size,
            height: size,
            decoration: BoxDecoration(
                borderRadius: BorderRadius.circular(radius), color: col),
            duration: const Duration(seconds: 1),
          ),

以上代码是简单使用示例,当改变其中的size、radius、col等值时,会有1秒的平滑过度动画。
如果需要修改动画的变化过程,可以使用curve参数,默认是Curves.linear,表示匀速变化;
如果需要监听动画结束,使用onEnd回调。

1.2 AnimatedPadding
支持且仅支持padding的过度动画。

1.3 AnimatedAlign
支持且仅支持alignment的过度动画。

1.4 AnimatedPositioned和AnimatedPositionedDirectional
AnimatedPositioned支持的属性如下:

AnimatedPositionedDirectional支持的属性如下:

两者几乎等价。

1.5 AnimatedOpacity
支持且仅支持opacity(透明度)的过度动画。

1.6 AnimatedDefaultTextStyle
DefaultTextStyle的动画版本。child下的text组件(不管是多少层),如果没有单独设置style,将会使用AnimatedDefaultTextStyle下的style属性,且style支持动画过度。

1.7 AnimatedPhysicalModel
PhysicalModel的动画版本,详细使用待更新。

1.8 SliverAnimatedOpacity
SliverOpacity的动画版本,详细使用待更新。

可以发现,以上的动画组件,都是其他组件的动画版本(比如AnimatedContainer和Container),在已有组件的基础上,增加了动画功能,封装的比较完善,使用比较简单。合理使用以上组件,可以完成大部分动画需求。

AnimatedPadding 在padding发生变化时会执行过渡动画到新状态
AnimatedPositioned 配合Stack一起使用,当定位状态发生变化时会执行过渡动画到新的状态。
AnimatedOpacity 在透明度opacity发生变化时执行过渡动画到新状态
AnimatedAlign 当alignment发生变化时会执行过渡动画到新的状态。
AnimatedContainer 当Container属性发生变化时会执行过渡动画到新的状态。
AnimatedDefaultTextStyle 当字体样式发生变化时,子组件中继承了该样式的文本组件会动态过渡到新样式。

1.9 自定义动画过渡组件