Animations几个常用组件动画
页面打开动画
OpenContainer(
transitionType: ContainerTransitionType.fade,
openBuilder: (BuildContext context, VoidCallback _) {
return const _DetailsPage();
},// 打开的页面
// onClosed: onClosed, // 关闭动作
// tappable: false, // 动画打断
closedBuilder: (BuildContext _, VoidCallback openContainer) {
return InkWell(
onTap: openContainer,
child: FlutterLogo(size: 100),
);
}, // 关闭时的样子,需要一手势事件包裹
)
淡出淡入切换页面动画
PageTransitionSwitcher(
transitionBuilder: (
Widget child,
Animation<double> animation,
Animation<double> secondaryAnimation,
) {
return FadeThroughTransition(
animation: animation,
secondaryAnimation: secondaryAnimation,
child: child,
);
},
child: pageList[pageIndex], // 页面更改时播放动画
),
共享方向轴的过渡
PageTransitionSwitcher(
reverse: false,
transitionBuilder: (
Widget child,
Animation<double> animation,
Animation<double> secondaryAnimation,
) {
return SharedAxisTransition(
animation: animation,
secondaryAnimation: secondaryAnimation,
transitionType: SharedAxisTransitionType.horizontal!,
child: child,
);
},
child: page2(), // 页面改变,播放动画
),
样式不错的输入框
TextField(
decoration: InputDecoration(
suffixIcon: Icon(
Icons.visibility,
size: 20,
color: Colors.black54,
),
isDense: true,
labelText: 'Email or phone number',
border: OutlineInputBorder(),
),
),
设置全局转场动画
MaterialApp(
theme: ThemeData.from(
colorScheme: const ColorScheme.light(),
).copyWith(
pageTransitionsTheme: const PageTransitionsTheme(
builders: <TargetPlatform, PageTransitionsBuilder>{
TargetPlatform.android: ZoomPageTransitionsBuilder(),
},
),
),
home: _TransitionsHomePage(),
),