Flutter是谷歌的移动UI框架,能够快速在iOS和Android上构建高质量的原生用户界面。git
IT界著名的尼古拉斯·高尔包曾说:轮子是IT进步的阶梯!热门的框架千篇一概,好用轮子万里挑一!Flutter做为这两年开始崛起的跨平台开发框架,其第三方生态相比其余成熟框架还略有不足,但轮子的数量也已经不少了。本系列文章挑选平常app开发经常使用的轮子分享出来,给你们提升搬砖效率,同时也但愿flutter的生态愈来愈完善,轮子愈来愈多。github
本系列文章准备了超过50个轮子推荐,工做缘由,尽可能每1-2天出一篇文章。app
tip:本系列文章合适已有部分flutter基础的开发者,入门请戳:flutter官网框架
flutter_staggered_animations: "^0.1.2"
复制代码
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
复制代码
flutter_staggered_animations提供三个类:ide
以及四个默认动画类型:动画
动画外部由AnimationLimiter组件包裹,ListView的子项由AnimationConfiguration.staggeredList来建立:ui
int count=20;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("ListView"),
),
body: AnimationLimiter(
child:ListView.builder(
itemCount: count,
itemBuilder: (context,index){
return AnimationConfiguration.staggeredList(
position: index,
duration: const Duration(milliseconds: 375),
child: SlideAnimation( //滑动动画
verticalOffset: 50.0,
child: FadeInAnimation( //渐隐渐现动画
child: Container(
margin: EdgeInsets.all(5),
color: Theme.of(context).primaryColor,
height: 60,
),
),
),
);
},
),
),
);
}
复制代码
动画外部由AnimationLimiter组件包裹,GridView的子项由AnimationConfiguration.staggeredGrid来建立:spa
int count=20;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("GridView"),
),
body:
AnimationLimiter(
child:GridView.builder(
itemCount: count,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
//横轴元素个数
crossAxisCount: 3,
//纵轴间距
mainAxisSpacing: 10.0,
//横轴间距
crossAxisSpacing: 10.0,
//子组件宽高长度比例
childAspectRatio: 1.0
),
itemBuilder: (context,index){
return AnimationConfiguration.staggeredGrid(
columnCount:count,
position: index,
duration: const Duration(milliseconds: 375),
child: SlideAnimation(
verticalOffset: 50.0,
child: FadeInAnimation(
child: Container(
color: Theme.of(context).primaryColor,
),
),
),
);
},
),
),
);
}
复制代码
动画外部由AnimationLimiter组件包裹,Column的子项由AnimationConfiguration.toStaggeredList来建立:code
int count=10;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Column"),
),
body:
AnimationLimiter(
child:Column(
children:AnimationConfiguration.toStaggeredList(
duration: const Duration(milliseconds: 375),
childAnimationBuilder:(widget) => SlideAnimation(
verticalOffset: 50.0,
child: FadeInAnimation(
child: widget,
),
),
children: ChildrenList()
)
),
),
);
}
List<Widget> ChildrenList(){
List<Widget> childs=[];
for (var i = 0; i < count; i++) {
childs.add(Container(
margin: EdgeInsets.all(5),
color: Theme.of(context).primaryColor,
height: 60,
));
}
return childs;
}
复制代码
动画外部由AnimationLimiter组件包裹,Row的子项由AnimationConfiguration.toStaggeredList来建立:cdn
int count=5;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Row"),
),
body:
AnimationLimiter(
child:Container(
height: 60,
child: Row(
children:AnimationConfiguration.toStaggeredList(
duration: const Duration(milliseconds: 375),
childAnimationBuilder:(widget) => SlideAnimation(
verticalOffset: 50.0,
child: FadeInAnimation(
child: widget,
),
),
children: ChildrenList()
)
),
),
),
);
}
List<Widget> ChildrenList(){
List<Widget> childs=[];
for (var i = 0; i < count; i++) {
childs.add(Container(
margin: EdgeInsets.only(right:5),
color: Theme.of(context).primaryColor,
width: 60,
));
}
return childs;
}
复制代码