《Flutter 控件大全》第七个:AnimatedContainer
程序员文章站
2022-05-30 19:32:24
...
- 如果你对Flutter还有疑问或者技术方面的疑惑,欢迎加入Flutter交流群(微信:laomengit)。
- 同时也欢迎关注我的Flutter公众号【老孟程序员】,公众号首发Flutter的相关内容。
- Flutter地址:http://laomengit.com 里面包含160多个组件的详细用法。
Flutter中很多用于动画的控件,这篇文章介绍动画控件AnimatedContainer
,我们可以通俗的理解AnimatedContainer是带动画功能的Container,这篇详细介绍了Container的用法。
AnimatedContainer只需要提供动画开始值和结束值,它就会动起来并不需要我们主动调用setState
方法。
变化AnimatedContainer的宽高实现变大的效果,代码如下:
bool click = false;
@override
Widget build(BuildContext context) {
return Center(
child: GestureDetector(
onTap: () {
setState(() {
click = !click;
});
},
child: AnimatedContainer(
height: click ? 200 : 100,
width: click ? 200 : 100,
color: Colors.blue,
duration: Duration(seconds: 3),
),
),
);
}
效果如下:
动画不仅可以作用在宽高上,还可以作用在颜色、边界、边界圆角半径、背景图片、形状等。
AnimatedContainer有2个必须的参数,一个时长duration
,即动画执行的时长,另一个是动画曲线curve
,默认是线性,系统为我们提供了很多动画曲线(加速、减速等)。
设置动画曲线代码如下:
AnimatedContainer(
curve: Curves.bounceIn,
...
)
如果想在动画执行结束时做一些事情,需要设置onEnd
,代码如下:
AnimatedContainer(
onEnd: (){
...
}
}
实战
将图片放大并过度到圆形,动画执行结束后在反向执行动画,如此反复,代码如下:
AnimatedContainer(
height: click ? 200 : 100,
width: click ? 200 : 100,
decoration: BoxDecoration(
image: DecorationImage(
image: NetworkImage(
'https://flutter.github.io/assets-for-api-docs/assets/widgets/owl-2.jpg'),
fit: BoxFit.cover,
),
borderRadius: BorderRadius.all(Radius.circular(
click ? 200 : 0,
))),
duration: Duration(seconds: 3),
curve: Curves.linear,
onEnd: (){
setState(() {
click = !click;
});
},
)
动画效果:
上一篇: 基本电脑硬件知识
推荐阅读
-
《Flutter 控件大全》第四十六个:Flexible、Expanded、Spacer
-
《Flutter 控件大全》第六十六个:PageView
-
《Flutter 控件大全》第十五个:AnimatedPositionedDirectional
-
《Flutter 控件大全》第三十三个:DecoratedBoxTransition
-
《Flutter 控件大全》第二十六个:ConstrainedBox、UnconstrainedBox、SizedBox、AspectRatio
-
《Flutter 控件大全》第六个:AnimatedBuilder
-
《Flutter 控件大全》第五十三个:Icon
-
《Flutter 控件大全》第五十一个:GridView
-
《Flutter 控件大全》第三十九个:DraggableScrollableSheet
-
《Flutter 控件大全》第五十个:GridPaper