1.渐隐渐现过渡效果
自定义CustomRoute Widget
新建一个custom_router.dart
文件,这个就是要自定义的路由方法,自定义首先要继承于通用的路由的构造器类PageRouterBuilder
。继承之后重写父类的CustomRoute
构造方法。
构造方法可以简单理解为:只要以调用这个类或者说是Widget,构造方法里的所有代码就执行了。
import 'package:flutter/material.dart'; //自定义的路由方法 class CustomRoute extends PageRouteBuilder{ final Widget widget; //重写构造方法(一调用该方法就执行的方法 就叫构造方法) CustomRoute(this.widget) :super( //父类的方法 //设置动画持续的时间,建议再1和2之间 transitionDuration:const Duration(seconds: 1), //页面的构造器 pageBuilder:( BuildContext context, Animation<double> animation1, Animation<double> animation2, ){ return widget; }, //过度效果 transitionsBuilder:( BuildContext context, Animation<double> animation1, Animation<double> animation2, Widget child ){ // 过度的动画的值 return FadeTransition( // 过度的透明的效果 opacity: Tween(begin: 0.0,end: 1.0) // 给他个透明度的动画 CurvedAnimation:设置动画曲线 .animate(CurvedAnimation( //父级动画 parent: animation1, //动画曲线 curve: Curves.ease )), child: child, ); }); }
//使用
import 'custom_router.dart';
Navigator.push(context, CustomRoute(SecondPage()));
- FadeTransition:渐隐渐现过渡效果,主要设置opactiy(透明度)属性,值是0.0-1.0。
-
animate :动画的样式,一般使用动画曲线组件(CurvedAnimation)。
-
curve: 设置动画的节奏,也就是常说的曲线,Flutter准备了很多节奏,通过改变动画取消可以做出很多不同的效果。
-
transitionDuration:设置动画持续的时间,建议再1和2之间。
2.缩放效果
//缩放的动画效果 return ScaleTransition( scale: Tween(begin: 0.0,end: 1.0) .animate(CurvedAnimation( parent: animation1, //快出慢进 curve: Curves.fastOutSlowIn )), child: child, );
3.旋转+缩放效果
//旋转+缩放效果 return RotationTransition( turns: Tween(begin: 0.0,end: 1.0) .animate(CurvedAnimation( parent: animation1, curve: Curves.fastOutSlowIn )), child: ScaleTransition( scale: Tween(begin: 0.0,end: 1.0) .animate(CurvedAnimation( parent: animation1, curve: Curves.fastOutSlowIn )), child: child, ), );
4.左右切换滑动
//左右滑动切换 return SlideTransition( //定义滑动的位置 position: Tween<Offset>(begin: Offset(-1.0,0.0),end: Offset(0.0,0.0)) .animate(CurvedAnimation( parent: animation1, curve: Curves.fastOutSlowIn )), child: child, );
可以直接这么写
Navigator.push( context, PageRouteBuilder( transitionDuration: Duration(milliseconds: 500), //动画时间为500毫秒 pageBuilder: (BuildContext context, Animation animation, Animation secondaryAnimation) { return ScaleTransition( scale: Tween(begin: 0.0,end: 1.0) .animate(CurvedAnimation( parent:animation, curve:Curves.fastOutSlowIn )), child: SecondPage(), ); }, ), );