您可以使用 Animated Builder 制作动画,下面的代码将在 4 秒内从字体大小 20-35 缩放文本让我将其分解为步骤,以便您更好地理解
1.你需要从TickerProviderStateMixin实现你的类。
2.你需要一个AnimationController和一个Animation变量;
3.将您的小部件包装在 AnimatedBuilder 中(注意 AnimatedBuilder 必须返回一个 Widget 至少一个容器)并将控制器添加到动画中
animation: _controller,
和返回 AnimatedWidget 的 builder
4.在init方法中用vsync和动画持续时间初始化控制器。并且带有 Tweenit 的动画采用 begin 和 end 值,它们定义了要动画的 Widget 的初始值和最终值
对我来说,在这种情况下,它是文本小部件,因此开始和结束值将对应于 fontSize.which 接收变量值作为animation.value
5.最后你想要的动画效果将由控制器中的动画和曲线效果指定
这是一个工作示例
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<SplashScreen>
with TickerProviderStateMixin {
AnimationController _controller;
Animation _animation;
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Color(0xFF005CA9),
body: Center(
child: AnimatedBuilder(
animation: _controller,
builder: (BuildContext context, Widget child) {
return Container(
child: Text(
'Hello World',
style: TextStyle(
color: Colors.white,
fontSize: _animation.value,
),
),
);
},
),
));
}
void initState() {
super.initState();
_controller =
AnimationController(vsync: this, duration: Duration(seconds: 4));
_animation = Tween<double>(
begin: 20,
end: 35,
).animate(
CurvedAnimation(
parent: _controller,
curve: Curves.ease,
),
);
_controller.forward();
}
}
上面的代码产生以下输出