现在Flutter的路由效果已经非常不错了,能满足大部分App的需求,但是谁不希望自己的App更酷更炫那,下面介绍几个酷炫的路由动画。

其实路由动画的原理很简单,就是重写并继承PageRouterBuilder这个类里的transitionsBuilder方法。

不过这个方法还是有很多写法的,通过写法的不同,产生的动画效果也有所不同。

1、渐隐渐现的动画效果

先编写一个主入口方法,还是最简单的格式,只不过home属性,使用的RouterFirst的组件是我们自定义的,需要我们再次编写。入口文件的代码如下:

import 'package:flutter/material.dart';
import 'pages.dart'; void main()=>runApp(MyApp()); class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title:'Flutter Demo',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home:RouterFirst()
);
}
}

然后是pages.dart,这个文件就是生成了两个页面(Flutter里的页面也是Widget,这个你要跟网页区分开)。有了两个页面就可以实现路由跳转了。

这里我们先用普通路由代替,看一看效果。

import 'package:flutter/material.dart';

class RouterFirst extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.red, //背景色
appBar: AppBar(
title: Text('FirstPage',style: TextStyle(fontSize: 36.0)),
elevation: 4.0, //0-4 和下面body的融合程度,0是不显示分隔状态,不写默认是4
),
body: Center(
child: MaterialButton(
child: Icon(
Icons.navigate_next,
color: Colors.white,
size: 64.0
),
onPressed: (){
Navigator.of(context).push(MaterialPageRoute(builder:(BuildContext context){
return RouterSecond();
}));
},
),
), );
}
} class RouterSecond extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.lightBlue,
appBar: AppBar(
title: Text('SecondPage',style:TextStyle(fontSize:36.0),),
backgroundColor: Colors.lightBlue,
leading:Container(),
elevation: 0.0,
),
body:Center(
child: MaterialButton(
child: Icon(
Icons.navigate_before,
color:Colors.white,
size:64.0
),
onPressed: ()=>Navigator.of(context).pop(),
),
)
);
}
}

上面代码中有一个新知识点,需要学习一下:

AppBar Widger的 elevation 属性:这个值是AppBar 滚动时的融合程度,一般有滚动时默认是4.0,现在我们设置成0.0,就是和body完全融合了。

写完这个页面代码后,已经可以进行最基本的导航了,但是并没有什么酷炫的动画。

自定义CustomRoute Widget

这个就是要自定义的路由方法,自定义首先要继承于通用的路由的构造器类PageRouterBuilder。继承之后重写父类的CustomRoute构造方法。

构造方法可以简单理解为:只要以调用这个类或者说是Widget,构造方法里的所有代码就执行了。

代码如下:

class CustomRoute extends PageRouteBuilder{
final Widget widget; //构造方法
CustomRoute(this.widget)
:super(
transitionDuration:Duration(seconds: ), //过渡时间
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)
.animate(CurvedAnimation(
parent: animation1,
curve: Curves.fastOutSlowIn, //动画曲线
)),
child: child,
);
}
);
}
  • FadeTransition:渐隐渐现过渡效果,主要设置opactiy(透明度)属性,值是0.0-1.0。

  • animate :动画的样式,一般使用动画曲线组件(CurvedAnimation)。

  • curve: 设置动画的节奏,也就是常说的曲线,Flutter准备了很多节奏,通过改变动画取消可以做出很多不同的效果。

  • transitionDuration:设置动画持续的时间,建议再1和2之间。

最后要把上面onPressed代码修改下:

onPressed: (){
// Navigator.of(context).push(MaterialPageRoute(builder:(BuildContext context){
// return RouterSecond();
// }));
Navigator.of(context).push(CustomRoute(RouterSecond()));
},

写完代码,我们已经可以看到在切换路由时有了渐隐渐现的动画效果。

2、缩放的动画效果

修改transitionsBuilder下{ }里的内容

//缩放的动画效果
return ScaleTransition(
scale: Tween(begin: 0.0,end: 1.0).animate(CurvedAnimation(
parent: animation1,
curve: Curves.fastOutSlowIn,
)),
child: child,
);

3、旋转+缩放动画效果

旋转+缩放的思路是在一个路由动画里的child属性里再加入一个动画,让两个动画同时执行。来看详细代码:

//旋转+缩放动画效果
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、左侧滑动进入退出动画

其实用的做多的还是左右滑动路由动画,其实实现起来也是非常简单,直接使用SlideTransition就可以了。

//左侧滑动进入退出
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,
);

Flutter酷炫的路由动画效果的更多相关文章

  1. 【Flutter 实战】酷炫的开关动画效果

    此动画效果是我在浏览文章时发现的一个非常酷炫的效果,于是就使用 Flutter 实现了. 更多动画效果及Flutter资源:https://github.com/781238222/flutter-d ...

  2. 20个Flutter实例视频教程-第05节: 酷炫的路由动画-1

    视屏地址: https://www.bilibili.com/video/av39709290/?p=5 博客地址: https://jspang.com/post/flutterDemo.html# ...

  3. 20个Flutter实例视频教程-第06节: 酷炫的路由动画-2

    博客地址: https://jspang.com/post/flutterDemo.html#toc-94f 视频地址: https://jspang.com/post/flutterDemo.htm ...

  4. 067——VUE中vue-router之使用transition设置酷炫的路由组件过渡动画效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. [转]收集android上开源的酷炫的交互动画和视觉效果:Interactive-animation

    原文链接:http://www.open-open.com/lib/view/open1411443332703.html 描述:收集android上开源的酷炫的交互动画和视觉效果. 1.交互篇 2. ...

  6. [转]收集android上开源的酷炫的交互动画和视觉效果

    原文链接:http://www.open-open.com/lib/view/open1411443332703.html 描述:收集android上开源的酷炫的交互动画和视觉效果. 1.交互篇 2. ...

  7. 使用纯 CSS 实现超酷炫的粘性气泡效果

    最近,在 CodePen 上看到这样一个非常有意思的效果: 这个效果的核心难点在于气泡的一种特殊融合效果. 其源代码在:CodePen Demo -- Goey footer,作者主要使用的是 SVG ...

  8. 纯CSS3写的10个不同的酷炫图片遮罩层效果【转】

    这个是纯CSS3实现的的10个不同的酷炫图片遮罩层效果,可以欣赏一下 在线预览 下载地址 实例代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...

  9. 纯CSS3写的10个不同的酷炫图片遮罩层效果

    这个是纯CSS3实现的的10个不同的酷炫图片遮罩层效果,可以欣赏一下 在线预览 下载地址 实例代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1 ...

随机推荐

  1. throttle(节流函数) 与 debounce(防抖动函数)理解与实现

    我们会对一些触发频率较高的事件进行监听,(如:resize scroll keyup事件) 如果在回调里执行高性能消耗的操作(如反复操作dom, 发起ajax请求等),反复触发时会使得性能消耗提高,浏 ...

  2. 谷歌网页性能分析工具 Lighthouse 的安装及使用

    github地址:https://github.com/GoogleChrome/lighthouse 一.如果可以翻墙的话可以从 chrome 扩展插件里直接安装. 二.下面是另一种使用方法:基于 ...

  3. idea 插件的使用

    idea 插件的使用 进阶篇(个人收集使用中的) 恭喜你,如果你已经看到这篇文章,证明在idear使用上已经初有小成!那么就要向着大神进发了! 下边就是大神之路! 插件的设置 在 IntelliJ I ...

  4. c#截图功能

    简化版: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sys ...

  5. java 下拉控件 转自 http://www.cnblogs.com/lhb25/p/form-enhanced-with-javascript-three.html

    表单元素让人爱恨交加.作为网页最重要的组成部分,表单几乎无处不在,从简单的邮件订阅.登陆注册到复杂的需要多页填写的信息提交功能,表单都让开发者花费了大量的时间和精力去处理,以期实现好用又漂亮的表单功能 ...

  6. Codeforces Round #599 (Div. 2) A,B1,B2,C 【待补 D】

    排序+暴力 #include<bits/stdc++.h> using namespace std; #define int long long #define N 1005000 int ...

  7. 富文本编辑器word

    tinymce是很优秀的一款富文本编辑器,可以去官网下载.https://www.tiny.cloud 这里分享的是它官网的一个收费插件powerpaste的旧版本源码,但也不影响功能使用. http ...

  8. CF540D Bad Luck Island

    嘟嘟嘟 看到数据范围很小,就可以暴力\(O(n ^ 3)\)dp啦. 我们令\(dp[i][j][k]\)表示这三种人分别剩\(i, j, k\)个的概率.然后枚举谁挂了就行. 这里的重点在于两个人相 ...

  9. c实现双向链表

    实现双向链表:创建.插入.删除 #include <iostream> #include <stdio.h> #include <string.h> #includ ...

  10. slf4j、jcl、jul、log4j1、log4j2、logback大总结[转]

    #1 系列目录 jdk-logging.log4j.logback日志介绍及原理 commons-logging与jdk-logging.log4j1.log4j2.logback的集成原理 slf4 ...