1. Flutter SizeTransition 动画原理与实现
在移动应用开发中,流畅的动画效果能显著提升用户体验。Flutter 的 SizeTransition 组件是一种专门用于处理尺寸变化的动画控件,它可以让 UI 元素在宽度或高度上的变化过程变得平滑自然。与简单的缩放变换不同,SizeTransition 提供了更精细的控制能力,能够实现各种创意动画效果。
SizeTransition 的核心原理是基于动画控制器(AnimationController)和尺寸因子(sizeFactor)来驱动子组件的尺寸变化。当 sizeFactor 从 0 变为 1 时,子组件会从零尺寸逐渐扩展到完整尺寸;反之则会产生收缩效果。这种动画特别适合用于列表项的展开/收起、菜单的弹出/隐藏等场景。
提示:SizeTransition 默认沿垂直方向(高度)进行动画,但通过 axis 参数可以切换为水平方向(宽度)动画。
1.1 基本使用示例
下面是一个最简单的 SizeTransition 实现示例:
dart复制class SizeTransitionDemo extends StatefulWidget {
@override
_SizeTransitionDemoState createState() => _SizeTransitionDemoState();
}
class _SizeTransitionDemoState extends State<SizeTransitionDemo>
with SingleTickerProviderStateMixin {
late AnimationController _controller;
late Animation<double> _sizeFactor;
@override
void initState() {
super.initState();
_controller = AnimationController(
duration: const Duration(seconds: 1),
vsync: this,
);
_sizeFactor = CurvedAnimation(
parent: _controller,
curve: Curves.easeInOut,
);
_controller.forward();
}
@override
Widget build(BuildContext context) {
return SizeTransition(
sizeFactor: _sizeFactor,
child: Container(
color: Colors.blue,
width: 200,
height: 200,
child: Center(child: Text('Hello Animation')),
),
);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
}
这段代码展示了 SizeTransition 的基本用法:
- 创建 AnimationController 控制动画时长(1秒)
- 使用 CurvedAnimation 添加缓动效果(easeInOut)
- 将动画值
