import 'package:flutter/material.dart'; //缩放路由动画 class ScaleRouter extends PageRouteBuilder { final Widget child; final int durationMs; final Curve curve; ScaleRouter({this.child, this.durationMs = 500,this.curve=Curves.fastOutSlowIn}) : super( pageBuilder: (context, animation, secondaryAnimation) => child, transitionDuration: Duration(milliseconds: durationMs), transitionsBuilder: (context, a1, a2, child) => ScaleTransition( scale: Tween(begin: 0.0, end: 1.0).animate( CurvedAnimation(parent: a1, curve: curve)), child: child, ), ); } //渐变透明路由动画 class FadeRouter extends PageRouteBuilder { final Widget child; final int durationMs; final Curve curve; FadeRouter({this.child, this.durationMs = 500,this.curve=Curves.fastOutSlowIn}) : super( pageBuilder: (context, animation, secondaryAnimation) => child, transitionDuration: Duration(milliseconds: durationMs), transitionsBuilder: (context, a1, a2, child) => FadeTransition( opacity: Tween(begin: 0.1, end: 1.0).animate( CurvedAnimation(parent: a1, curve:curve,)), child: child, )); } //旋转路由动画 class RotateRouter extends PageRouteBuilder { final Widget child; final int durationMs; final Curve curve; RotateRouter({this.child, this.durationMs = 500,this.curve=Curves.fastOutSlowIn}) : super( pageBuilder: (context, animation, secondaryAnimation) => child, transitionDuration: Duration(milliseconds: durationMs), transitionsBuilder: (context, a1, a2, child) => RotationTransition( turns: Tween(begin: 0.1, end: 1.0).animate( CurvedAnimation(parent: a1, curve:curve,)), child: child, )); } //右--->左 class Right2LeftRouter extends PageRouteBuilder { final Widget child; final int durationMs; final Curve curve; Right2LeftRouter({this.child,this.durationMs=500,this.curve=Curves.fastOutSlowIn}) :super( transitionDuration:Duration(milliseconds: durationMs), pageBuilder:(ctx,a1,a2)=>child, transitionsBuilder:(ctx,a1,a2, child,) => SlideTransition( child: child, position: Tween( begin: Offset(1.0, 0.0), end: Offset(0.0, 0.0),).animate( CurvedAnimation(parent: a1, curve: curve)), )); } //左--->右 class Left2RightRouter extends PageRouteBuilder { final Widget child; final int durationMs; final Curve curve; List mapper; Left2RightRouter({this.child,this.durationMs=500,this.curve=Curves.fastOutSlowIn}) :assert(true),super( transitionDuration:Duration(milliseconds: durationMs), pageBuilder:(ctx,a1,a2){return child;}, transitionsBuilder:(ctx,a1,a2,child,) { return SlideTransition( position: Tween( begin: Offset(-1.0, 0.0), end: Offset(0.0, 0.0),).animate( CurvedAnimation(parent: a1, curve: curve)), child: child ); }); } //上--->下 class Top2BottomRouter extends PageRouteBuilder { final Widget child; final int durationMs; final Curve curve; Top2BottomRouter({this.child,this.durationMs=500,this.curve=Curves.fastOutSlowIn}) :super( transitionDuration:Duration(milliseconds: durationMs), pageBuilder:(ctx,a1,a2){return child;}, transitionsBuilder:(ctx,a1,a2, child,) { return SlideTransition( position: Tween( begin: Offset(0.0,-1.0), end: Offset(0.0, 0.0),).animate( CurvedAnimation(parent: a1, curve: curve)), child: child ); }); } //下--->上 class Bottom2TopRouter extends PageRouteBuilder { final Widget child; final int durationMs; final Curve curve; Bottom2TopRouter({this.child,this.durationMs=500,this.curve=Curves.fastOutSlowIn}) :super( transitionDuration:Duration(milliseconds: durationMs), pageBuilder:(ctx,a1,a2)=> child, transitionsBuilder:(ctx,a1,a2, child,) { return SlideTransition( position: Tween( begin: Offset(0.0, 1.0), end: Offset(0.0, 0.0),).animate( CurvedAnimation(parent: a1, curve: curve)), child: child ); }); } //缩放+透明+旋转路由动画 class ScaleFadeRotateRouter extends PageRouteBuilder { final Widget child; final int durationMs; final Curve curve; ScaleFadeRotateRouter({this.child, this.durationMs = 1000,this.curve=Curves.fastOutSlowIn}) : super( transitionDuration: Duration(milliseconds: durationMs), pageBuilder: (ctx, a1, a2)=>child,//页面 transitionsBuilder: (ctx, a1, a2, Widget child,) => RotationTransition(//旋转动画 turns: Tween(begin: 0.0, end: 1.0).animate(CurvedAnimation( parent: a1, curve: curve, )), child: ScaleTransition(//缩放动画 scale: Tween(begin: 0.0, end: 1.0).animate( CurvedAnimation(parent: a1, curve: curve)), child: FadeTransition(opacity://透明度动画 Tween(begin: 0.5, end: 1.0).animate(CurvedAnimation(parent: a1, curve: curve)), child: child,), ), )); } //无动画 class NoAnimRouter extends PageRouteBuilder { final Widget child; NoAnimRouter({this.child}) : super( opaque: false, pageBuilder: (context, animation, secondaryAnimation) => child, transitionDuration: Duration(milliseconds: 0), transitionsBuilder: (context, animation, secondaryAnimation, child) => child); }