过场动画

过场动画也就是切换路由时的动画

这个东西有几种方案可以做

  1. 继承 PageRoute来做, 复写 5 个抽象方法, 并抽象buildTransitions
  2. 继承已有的系统类, 比如 MaterialPageRoute 或者 CupertinoPageRoute
  3. 一劳永逸的方案, 使用PageTransitionsTheme类结合 MaterialApp 的 theme 的pageTransitionsTheme属性

前两种目前网络上也有一些人做了分享, 但第三种好像很少有人使用, 我这里就来说一下PageTransitionsTheme的用法

这东西有如下的好处:

  1. 设置一次, 你所有的MaterialPageRoute都可以生效
  2. 对于命名路由, 也就是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相关推荐

  1. 在 Flutter 中实现文字动画

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tds9vto6-1626653755909)(https://ducafecat.tech/2021/07/19/tra ...

  2. UE4-(蓝图)第四十八课过场动画之导出

    一.过场动画导出选项 可以将整个主序列导出也可以单独导出一个子序列 二.参数设置 Image Output Format :输出格式 Frame Rate:帧率 Resolution:分辨率 Burn ...

  3. 谈一谈Flutter中的共享元素动画Hero

      如果你是一名安卓开发者,应该很熟悉 共享元素变换(Shared Element Transition)这个概念,它可以通过几行代码,就在两个Activity或者Fragment之间做出流畅的转场动 ...

  4. 【译】Flutter中的花式背景动画

    原文链接:https://medium.com/@felixblaschke/fancy-background-animations-in-flutter-4163d50f5c37 本文主要介绍如何使 ...

  5. element中有多个合计_深入理解 Flutter 中的 Widget, Element, RenderObject

    这篇文章基于 Flutter stable v1.7 总结下 Flutter 当前的 UI 系统以及相关的概念, 在最后会通过自己组合一个 Gradient Button 按钮的方式来熟悉 Flutt ...

  6. android fragment动画,Fragment 的过场动画

    Fragment 的过场动画 Android,Fragment,动画 2018.08.03 在 Android 开发中,有些应用对页面的过场动画要求比较高,他们中期望给用户提供一个良好的用户体验.适当 ...

  7. 关卡 动画 蓝图 运行_UE4无缝过场动画

    最近有个哥们给我看他们最近在做的一个游戏,其中有这样一段镜头 https://www.zhihu.com/video/1171378736917364736 运用到了一个很常用的过场方式,就是平时我们 ...

  8. 手把手教你用Flutter做炫酷动画

    导读:随着技术的发展,很多网页开发技术都带有动画效果,比如淡入淡出.渐变.变大变小,等等.Flutter中的动画效果可以用酷炫来形容,这也是Flutter的一大特色.现代的应用程序不仅仅需要程序稳定. ...

  9. 5分钟制作Unity过场动画 | Timeline

    你好,我是跟着大智学Unity的萌新,我叫小新,这是我本周的学习总结报告哦. 这里是5分钟Unity学院,没有废话的Unity教程,今天来学习如何制作过场动画. 过场动画,这么复杂的东西如何在5分钟内 ...

最新文章

  1. 安装MySQL出现的this application
  2. ajax同步,异步简单的介绍
  3. Java AQS论文翻译
  4. 计算机硬盘有usb借口吗,为什么移动硬盘不建议插在台式机前置USB接口上
  5. 热点账户问题和常用解决方案【上】
  6. 导致散户亏损的三大根源
  7. 如何在SAP Cloud for Customer的Silverlight UI中找到后台错误的明细
  8. spring cloud各个微服务打包到docker容器内
  9. 起点文学网ViewState解码分析后的结果研究
  10. 【NOIP2005】【Luogu1046】陶陶摘苹果
  11. linux命令行发送串口_从命令行在Linux中发送电子邮件
  12. android jni示例_Android动画示例
  13. 记一次物理服务器Linux系统中未找到网卡的处理方式
  14. WIFI内部通话系统技术解决方案
  15. 工作流管理系统开发之十 数据库连接及事务设定
  16. 免费在线二维DataMatrix码生成器
  17. android模拟器如何增加RAM
  18. photoshop--PS拼图
  19. 华芯微特SWM320TFT屏人机交互方案手册
  20. 寒江独钓第3章——串口过滤

热门文章

  1. 8月24日进步 30万人只有3人做对的美国高考数学题
  2. mysql5.7.21源码解析,史上最强Mysql5.7源码安装讲解
  3. 为新机让路走降价路线的两部手机,市场竞争太激烈,旗舰机也扛不住
  4. C++四舍五入保留整数
  5. 关于STM32例程中U8,U16,U32的问题
  6. 保弘实业|“裸婚家庭”怎么投资理财
  7. 安卓手机/平板扩展电脑屏幕软件spacedesk
  8. 公司项目里如何进行前后端接口联调
  9. web无序列表去掉点_web前端入门到实战:css如何玩转有序无序列表项list样式
  10. EDM邮件营销真的落伍了吗?