/* * @author lsy * @date 2019-10-14 **/ import 'package:flutter/material.dart'; enum RouteWay { SCARE, TRAN_RIGHT_TO_LEFT, ALP, } class CustomRoute extends PageRouteBuilder { final Widget widget; RouteWay routeWay; CustomRoute(this.widget, {RouteWay routeWay = RouteWay.TRAN_RIGHT_TO_LEFT}) : super( // 设置过度时间 transitionDuration: Duration(milliseconds: 230), // 构造器 pageBuilder: ( // 上下文和动画 BuildContext context, Animation<double> animaton1, Animation<double> animaton2, ) { return widget; }, transitionsBuilder: ( BuildContext context, Animation<double> animaton1, Animation<double> animaton2, Widget child, ) { // 渐变效果 if (routeWay.index == 2) { return FadeTransition( // 从0开始到1 opacity: Tween(begin: 0.0, end: 1.0).animate(CurvedAnimation( // 传入设置的动画 parent: animaton1, // 设置效果,快进漫出 这里有很多内置的效果 curve: Curves.fastOutSlowIn, )), child: child, ); } else if (routeWay.index == 1) { return SlideTransition( position: Tween<Offset>( begin: Offset(1.0, 0.0), end: Offset(0.0, 0.0)) .animate(CurvedAnimation( parent: animaton1, curve: Curves.fastOutSlowIn)), child: child, ); } else { return ScaleTransition( scale: Tween(begin: 0.0, end: 1.0).animate(CurvedAnimation( parent: animaton1, curve: Curves.fastOutSlowIn)), child: child, ); } // 旋转加缩放动画效果 // return RotationTransition( // turns: Tween(begin: 0.0,end: 1.0) // .animate(CurvedAnimation( // parent: animaton1, // curve: Curves.fastOutSlowIn, // )), // child: ScaleTransition( // scale: Tween(begin: 0.0,end: 1.0) // .animate(CurvedAnimation( // parent: animaton1, // curve: Curves.fastOutSlowIn // )), // child: child, // ), // ); }); }