flutter中的过场动画 PageTransitionsTheme
过场动画
过场动画也就是切换路由时的动画
这个东西有几种方案可以做
- 继承
PageRoute
来做, 复写 5 个抽象方法, 并抽象buildTransitions
- 继承已有的系统类, 比如 MaterialPageRoute 或者 CupertinoPageRoute
- 一劳永逸的方案, 使用
PageTransitionsTheme
类结合 MaterialApp 的 theme 的pageTransitionsTheme
属性
前两种目前网络上也有一些人做了分享, 但第三种好像很少有人使用, 我这里就来说一下PageTransitionsTheme
的用法
这东西有如下的好处:
- 设置一次, 你所有的
MaterialPageRoute
都可以生效 - 对于命名路由, 也就是
pushNamed
体系的也有效
文章目录
- 过场动画
- 先分析下源码
- 如何使用
- 使用系统提供的一些动画
- 自定义
- 后记
先分析下源码
为啥分析源码? 因为如果上来就用显得不高端
先找一个大家都知道的切入点, 一般的过场动画都是用的 Navigator.push
方法来实现的
看看方法里的实现, 会发现很多常见的东西, 比如, 每一个 Route 都有自己的 OverlayEntry
然后会有一个 install 方法
而实际调用中, 这个 Overlay 会被插入到 Overlay 栈内, 从而在界面上显示
经过这一串的调用, 就把 Navigator push 和 Route 关联到了一起, 那么 theme 是怎么和 Route 关联起来的呢, 我们进入 MaterialPageRoute 看一下
我们看到, 这里是从 Theme 中找到 pageTransitionsTheme, 然后调用 pageTransitionsTheme 的 buildTransitions 方法来完成构建, 所以这就是我们可以在 theme 中一次修改, 多处生效的主因了
如何使用
前面查看到了源码是如何关联到 pageTransitionsTheme
属性的, 我们接着就是该自定义的时候了
修改自己的 MyApp, 修改pageTransitionsTheme
属性
class MyApp extends StatelessWidget {// This widget is the root of your application.@overrideWidget build(BuildContext context) {return MaterialApp(title: 'Flutter Demo',theme: ThemeData(primarySwatch: Colors.blue,pageTransitionsTheme: PageTransitionsTheme(builders: <TargetPlatform, PageTransitionsBuilder>{TargetPlatform.iOS: createTransition(),TargetPlatform.android: createTransition(),},),),home: MyHomePage(title: 'Flutter Demo Home Page'),);}
}
使用系统提供的一些动画
PageTransitionsBuilder createTransition() {return FadeUpwardsPageTransitionsBuilder();
}
效果如下:
根据注释, sdk 中有如下几种动画
其中FadeUpwardsPageTransitionsBuilder
对应安卓默认的, PageTransitionsBuilder
自然是对应的 iOS
ZoomPageTransitionsBuilder:
OpenUpwardsPageTransitionsBuilder:
自定义
除了已有的, 我们还可以自定义动画, 可以配合 animation组件来完成酷炫的动画效果, 具体的可以查看官网动画部分介绍
自定义 MyPageTransitionsBuilder
import 'package:flutter/material.dart';PageTransitionsBuilder createTransition() {// return FadeUpwardsPageTransitionsBuilder();// return OpenUpwardsPageTransitionsBuilder();// return ZoomPageTransitionsBuilder();return MyPageTransitionsBuilder();
}class MyPageTransitionsBuilder extends PageTransitionsBuilder {@overrideWidget buildTransitions<T>(PageRoute<T> route,BuildContext context,Animation<double> animation,Animation<double> secondaryAnimation,Widget child) {return ScaleTransition(scale: animation,child: RotationTransition(turns: animation,child: child,),);}
}
效果如下
后记
仓库地址
有问题请在本人博客下留言(github 登陆即可)
flutter中的过场动画 PageTransitionsTheme相关推荐
- 在 Flutter 中实现文字动画
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tds9vto6-1626653755909)(https://ducafecat.tech/2021/07/19/tra ...
- UE4-(蓝图)第四十八课过场动画之导出
一.过场动画导出选项 可以将整个主序列导出也可以单独导出一个子序列 二.参数设置 Image Output Format :输出格式 Frame Rate:帧率 Resolution:分辨率 Burn ...
- 谈一谈Flutter中的共享元素动画Hero
如果你是一名安卓开发者,应该很熟悉 共享元素变换(Shared Element Transition)这个概念,它可以通过几行代码,就在两个Activity或者Fragment之间做出流畅的转场动 ...
- 【译】Flutter中的花式背景动画
原文链接:https://medium.com/@felixblaschke/fancy-background-animations-in-flutter-4163d50f5c37 本文主要介绍如何使 ...
- element中有多个合计_深入理解 Flutter 中的 Widget, Element, RenderObject
这篇文章基于 Flutter stable v1.7 总结下 Flutter 当前的 UI 系统以及相关的概念, 在最后会通过自己组合一个 Gradient Button 按钮的方式来熟悉 Flutt ...
- android fragment动画,Fragment 的过场动画
Fragment 的过场动画 Android,Fragment,动画 2018.08.03 在 Android 开发中,有些应用对页面的过场动画要求比较高,他们中期望给用户提供一个良好的用户体验.适当 ...
- 关卡 动画 蓝图 运行_UE4无缝过场动画
最近有个哥们给我看他们最近在做的一个游戏,其中有这样一段镜头 https://www.zhihu.com/video/1171378736917364736 运用到了一个很常用的过场方式,就是平时我们 ...
- 手把手教你用Flutter做炫酷动画
导读:随着技术的发展,很多网页开发技术都带有动画效果,比如淡入淡出.渐变.变大变小,等等.Flutter中的动画效果可以用酷炫来形容,这也是Flutter的一大特色.现代的应用程序不仅仅需要程序稳定. ...
- 5分钟制作Unity过场动画 | Timeline
你好,我是跟着大智学Unity的萌新,我叫小新,这是我本周的学习总结报告哦. 这里是5分钟Unity学院,没有废话的Unity教程,今天来学习如何制作过场动画. 过场动画,这么复杂的东西如何在5分钟内 ...
最新文章
- 安装MySQL出现的this application
- ajax同步,异步简单的介绍
- Java AQS论文翻译
- 计算机硬盘有usb借口吗,为什么移动硬盘不建议插在台式机前置USB接口上
- 热点账户问题和常用解决方案【上】
- 导致散户亏损的三大根源
- 如何在SAP Cloud for Customer的Silverlight UI中找到后台错误的明细
- spring cloud各个微服务打包到docker容器内
- 起点文学网ViewState解码分析后的结果研究
- 【NOIP2005】【Luogu1046】陶陶摘苹果
- linux命令行发送串口_从命令行在Linux中发送电子邮件
- android jni示例_Android动画示例
- 记一次物理服务器Linux系统中未找到网卡的处理方式
- WIFI内部通话系统技术解决方案
- 工作流管理系统开发之十 数据库连接及事务设定
- 免费在线二维DataMatrix码生成器
- android模拟器如何增加RAM
- photoshop--PS拼图
- 华芯微特SWM320TFT屏人机交互方案手册
- 寒江独钓第3章——串口过滤
热门文章
- 8月24日进步 30万人只有3人做对的美国高考数学题
- mysql5.7.21源码解析,史上最强Mysql5.7源码安装讲解
- 为新机让路走降价路线的两部手机,市场竞争太激烈,旗舰机也扛不住
- C++四舍五入保留整数
- 关于STM32例程中U8,U16,U32的问题
- 保弘实业|“裸婚家庭”怎么投资理财
- 安卓手机/平板扩展电脑屏幕软件spacedesk
- 公司项目里如何进行前后端接口联调
- web无序列表去掉点_web前端入门到实战:css如何玩转有序无序列表项list样式
- EDM邮件营销真的落伍了吗?