頁面轉場動畫對於一個成熟的應用來講,是十分重要的。github
Flutter 提供了很便捷的方式實現頁面轉場動畫。bash
一般,在頁面跳轉的時候會使用 Flutter 提供的 MaterialPageRoute,它提供了默認的頁面跳轉動畫。ide
固然,咱們也能夠定義本身的頁面跳轉動畫。函數
使用 PageRouteBuilder,能夠快速的自定義一個頁面跳轉動畫。post
Navigator.push(context, PageRouteBuilder(pageBuilder:
(BuildContext context, Animation animation,
Animation secondaryAnimation) {
return ScaleTransition(
scale: animation,
alignment: Alignment.bottomRight,
child: AnimPage());
複製代碼
經過繼承 PageRoute,也能夠自定義頁面跳轉動畫。動畫
class FadeRoute extends PageRoute {
FadeRoute({
@required this.pageBuilder,
this.transitionDuration = const Duration(milliseconds: 300),
this.opaque = true,
this.barrierDismissible = false,
this.barrierColor,
this.barrierLabel,
this.maintainState = true,
});
final WidgetBuilder pageBuilder;
@override
final Duration transitionDuration;
@override
final bool opaque;
@override
final bool barrierDismissible;
@override
final Color barrierColor;
@override
final String barrierLabel;
@override
final bool maintainState;
@override
Widget buildPage(BuildContext context, Animation<double> animation,
Animation<double> secondaryAnimation) => pageBuilder(context);
@override
Widget buildTransitions(BuildContext context, Animation<double> animation,
Animation<double> secondaryAnimation, Widget child) {
return FadeTransition(
opacity: animation,
child: pageBuilder(context),
);
}
}
複製代碼
關鍵就是實現 buildPage()
和 buildTransitions()
兩個函數。ui
在 buildTransitions()
中添加轉場 Widget 。this
使用:spa
Navigator.push(context, FadeRoute(builder: (context) {
return AnimPage();
}));
複製代碼
定義起來不是很方便,可是便於封裝統一的轉場動畫。