ModalRoute.of(context) API可以获取当前路由对象,通过它我们可以获取关于当前页面的所有属性:

属性:

  • isActive
    当前路由是都位于navigator中;如果该路由active,还位于最顶层路由,则isCurrent为true;如果该路由active,并且是第一个路由(最底层路由),则isFirst为true。

  • isCurrent
    判断当前路由是否为最顶层路由,如果胃true,则isActive也一定是true。

  • isFirst
    判断当前路由是否为最底层路由。如果为最底层路由,那么Navigator.canPop必定返回false,willHandlePopInternally也会返回false。如果isFirst和isCurrent同时为true,则该路由是navigator中的唯一路由(isActive也一定是true)。

  • navigator
    路由所属的navigator。

  • overlayEntries
    当前路由的overlay中已经存在了的事务集合,是一个List。

  • settings
    获取当前路由的基本配置信息,主要包括两个属性:isInitialRoute表示是否为初始路由(最早被push到navigator中的那个路由,初始路由默认跳过路由动画,来加速app启动);name表示路由名。

  • controller
    路由动画的animation controller,这个属性添加了@protected注解,不建议直接获取,而是通过animation属性来暴露路由动画。

  • animationsecondaryAnimation
    路由动画,也就是创建路由时RoutePageBuilder中的动画。

  • transitionDuration
    路由动画的持续时间。

  • barrierColor
    屏障颜色,一个屏障(barrier)时渲染在每一个路由底部的,用来防止用户和下一层的路由交互。比如我们打开一个dialog路由,位于dialog底部的页面会因为barrier的原因而变暗。如果值为bull,则barrier为透明色。

  • barrierLabel
    一个dismissible barrier的语义标签,是为了支持semantic功能的,一般app可以忽略。

  • barrierDismissible
    是否可以通过点击屏障来关闭路由。

  • semanticsDismissible
    当前barrier的semantics是否被放到了semantics tree里面,true为在树里面,false为不在树里面且点击barrier没有任何效果(不能关闭路由)。

  • opaque
    当路由变换结束时,是否需要模糊前面的路由。如果是不透明的路由,那么前一个被遮挡了的路由就不会再被创建了(可以节省系统资源)。

  • canPop
    当前路由是否可以被pop出去,如果这个值变化了,路由会重新创建,所有使用了ModalRoute.of的widgets都会收到通知。

  • maintainState
    当路由为inactive状态时,是否需要保存路由状态。这个值在路由的生命周期中不应该被改变,因为在路由初期的时候(install方法执行的时候),这个值被用在了createOverlayEntries方法中。

  • offstage
    判断当前路由是否可见。在路由进入transition当第一帧开始时,路由就会在当前页面创建一个Offstage控件,路由不可见并且不可交互,但是每一个widget都已经有了固定的大小和位置,因此HeroController可以定位到hero控件的位置。如果offstage为
    true,那么modal barrier是不会被渲染的(rendered)。

  • subtreeContext
    包含了当前路由的主要内容的子树的context。

  • currentResult
    如果路由pop的时候没有指定返回值,或者返回值为null,那么就会用这个值来代替(该值默认为null)。

  • popped
    这是一个Future对象,当路由从navigator中pop时被调用,这个Future是和Navigator.pop的值一起完成的。

  • completed
    也是一个Future对象,会在路由变换结束后调用,且只会被调用一次。注意是动画dismiss之后,所以会在popped之后执行,因为``popped```可能在animation还没开始的时候就执行完毕了。

  • finishedWhenPopped
    官方没给注释,看代码是路由动画的status等于AnimationStatus.dismissed时为true。

  • hasScopedWillPopCallback
    如果存在WillPopCallback回调(一个或多个都行),则为true。这个方法可以用来禁止在MaterialPageRoute中设置TargetPlatform.iOS时的侧滑关闭。

  • willHandlePopInternally
    判断路由内部是否有本地历史事务(LocalHistoryEntry)。举个例子,PageA——>PageB,其中PageB包含了一个本地历史事务Entry1,那么当Entry1执行的时候,点击返回键,回到PageB,再点击返回键,回到PageA,而不是直接从Entry1回到PageA(虽然
    Entry1和PageB都属于同一个路由)。建议看下LocalHistoryRoute的源码注释,有很清楚的demo例子。
    方法

  • didPush()
    对应didPop(),任意一方请求push这个路由的时候被调用,在路由的install()方法之后执行,在push变换完成后返回返回值。didChangeNext和didChangePrevious一般会紧跟着这个方法被调用。

  • didPop()
    任意一方请求pop掉这个路由的时候被调用。当路由内部处理的时候(比如有自己的stack栈或者内部state状态)返回false,否则返回true。如果返回true,navigator会把这个路由从历史里面remove掉,但是还没有调用dispose方法,而是通过路由自己调用
    NavigatorState.finalizeRoute,这个方法里面会最终执行dispose方法,这给予了路由执行退出动画的时间。

  • didReplace(Route<dynamic> oldRoute)
    当一个路由替换了另一个路由当时候被调用,具体是在新路由的install()方法之后执行,didChangeNext和didChangePrevious一般会紧跟着这个方法被调用。

  • didComplete()
    路由被pop掉或者被一些其他的方法优雅地remove掉的时候调用。

  • dispose()
    这个时候路由会remove它的overlays,并释放其他所有资源,这个路由和navigator之间再也没有任何关联了。

  • install(OverlayEntry insertionPoint)
    路由被插入到navigator的时候被调用。这个方法里面会填充overlayEntries并将事务列表添加到overlay中(可以通过Navigator.overlay来获取)。这个操作之所以由route来控制而不是由navigator来亲自控制是因为remove overlay事务的操作也是由route来控制的,这样就对称了。如果是第一个被插入的路由,insertionPoint属性会是null。

  • willPop()
    返回的是一个Future类型,返回值为addScopedWillPopCallback中第一个返回false的callback的值,如果这些callback全都返回了true,则返回super.willPop()。一般不会复写这个方法,因为我们很少会直接去new一个modal routes,一般都是通过showDialog()这样的方法来创建modal routes

  • addLocalHistoryEntry(LocalHistoryEntry entry)removeLocalHistoryEntry(LocalHistoryEntry entry)
    添加/删除一个本地事务(remove操作是同步执行的)。

  • addScopedWillPopCallback(WillPopCallback callback)
    拦截用户的关闭路由操作。一般配合WillPopScope控件使用,这个控件会找到最近的ModalRoute然后注册这个回调。注意这是一个异步方法,可能路由已经disposed掉了,这个回调才开始执行,所以最好是先判断一下State.mounted。

  • removeScopedWillPopCallback(WillPopCallback callback)
    remove掉监听。。

  • canTransitionFrom(TransitionRoute<dynamic> previousRoute)和 canTransitionTo(TransitionRoute<dynamic> nextRoute)
    表示是否可以从给定的route中进行transition,子类可以重写这个方法来限制两个route的变换交互。

  • changedExternalState()
    当Navigator的NavigatorState或者widget变化时被调用,比如MaterialApp重建的时候。在ModalRoute中会强制重建当前页面。

  • changedInternalState()
    当路由的内部状态改变时被调用,包括了willHandlePopInternally、didPop、offstage等等内部状态的值改变。

  • didChangeNext(Route<dynamic> nextRoute)didChangePrevious(Route<dynamic> previousRoute)
    给定的路由的next route / previous route发生改变时会被调用。

  • didPopNext(Route<dynamic> nextRoute)
    nextRoute被pop的时候会被调用。

  • createAnimationController()
    控制当前路由动画的controller(从前一个路由push到当前路由和从当前路由回去前路由的动画)。

  • createAnimation()
    用于暴露当前路由变换的进度,这个animation受createAnimationController()方法中创建的controller控制。

  • createOverlayEntries()
    创建overlay事务。

  • buildTransitions( BuildContext context,Animation<double> animation,Animation<double> secondaryAnimation, Widget child, )
    可以重写这个方法,然后给child控件包裹一个或多个transition控件,来定义路由如何进入和离开屏幕。默认情况下,child(包含了buildPage返回的控件)不包裹任何transition控件。它和buildPage方法的区别就是,buildTransitions会在每次路由状
    态变化时都被调用(比如路由canPop的时候)。我们常见的创建PageRouteBuilder的时候,如果设置了transitionsBuilder属性,其实就是调用了该方法。

  • buildPage(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation)
    定义路由的主页面内容。

[摘录] 当页[ModalRoute.of(context)]路由属性详解的更多相关文章

  1. BGP路由属性详解

    Weight属性:cisco私有的BGP属性参数,它只适用于一台路由器中的路由,也就是不会传递给任何其他的路由器.他的取值范围为<0-65535>,这个数越大优先级越高,默认从邻居学到的路 ...

  2. OutputCache属性详解(一)一Duration、VaryByParam

    目录 OutputCache概念学习 OutputCache属性详解(一) OutputCache属性详解(二) OutputCache属性详解(三) OutputCache属性详解(四)— SqlD ...

  3. OutputCache属性详解(二)一 Location

    目录 OutputCache概念学习 OutputCache属性详解(一) OutputCache属性详解(二) OutputCache属性详解(三) OutputCache属性详解(四)— SqlD ...

  4. OutputCache属性详解(三)— VaryByHeader,VaryByCustom

    目录 OutputCache概念学习 OutputCache属性详解(一) OutputCache属性详解(二) OutputCache属性详解(三) OutputCache属性详解(四)— SqlD ...

  5. OutputCache属性详解(四)— SqlDependency

    目录 OutputCache概念学习 OutputCache属性详解(一) OutputCache属性详解(二) OutputCache属性详解(三) OutputCache属性详解(四)— SqlD ...

  6. dede的pagelist标签的listsize数字属性详解(借鉴)

    dede的pagelist标签的listsize数字属性详解.见远seo经常用织梦搭建各种网站,有次发现列表页面的分页显示超过div的界限,也就是溢出了或者说是撑破了.后来经过研究发现是pagelis ...

  7. EditText属性详解

    关于EditText属性详解很详细的记录,转过来收着 1.EditText输入的文字为密码形式的设置 (1)通过.xml里设置: 把该EditText设为:android:password=" ...

  8. context.Session[“xxx”]详解

    1.在aspx和aspx.cs中,都是以Session[“xxx”]=”aaa”和aaa=Session[“xxx”].ToString()进行读写.而在ashx中,Session都要使用contex ...

  9. dede的pagelist标签的listsize数字属性详解

    转载▼http://blog.sina.com.cn/s/blog_a4f3bd4e01012c8n.html dede的pagelist标签的listsize数字属性详解.见远seo经常用织梦搭建各 ...

随机推荐

  1. JavaScript 实用工具库 : lodashjs

    首页地址:https://www.lodashjs.com/

  2. 移动端适配(rem & viewport)--移动端开发整理笔记(四)

    移动端适配 通过rem适配 em: 根据元素自身的字体大小来计算自己的尺寸 rem: (root em) 根据根节点(html)的字体大小来计算自己的尺寸   我们知道,在不同的手机设备,分辨率大小是 ...

  3. java读取HDFS压缩文件乱码

    java通过调用HDFS系统的FileSystem等API 直接读取HDFS的压缩文件会产生乱码 解决方法: 1.调用解码的API,解码后通过IO流处理. public static void mai ...

  4. 各类app的小结

    各类app小结: 一.原生app: 二.webapp:   无法调用底层设备的api 三.混合app的方法: 1.原生app 嵌入 2.flutter 3.react native 4.AppCan( ...

  5. Linux下进程间通信方式——pipe(管道)

    每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷到内核缓冲区,进程B再从内核缓冲区把 ...

  6. 洛谷P5020 货币系统

    题目 题意简化一下就是找题目给定的n个数最多能消掉多少个,我们用个tong[i]来记录i这个数值能不能用小于等于i的货币组合起来,等于1意味着他只能由自己本身的货币组成,等于2说明他可以被其他货币组成 ...

  7. 11-散列2 Hashing (25 分)

    The task of this problem is simple: insert a sequence of distinct positive integers into a hash tabl ...

  8. 09-排序2 Insert or Merge (25 分)

    According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...

  9. 关于微信订阅号里自动回复里的a链接的问题

    前阵子做了一个微信订阅号的活动,然后发现一个问题:就是回复内容里的a标签微信没有解析出来,而是这样 正常应该是这样: 具体出现这种情况的手机有: 魅族的型号是:M1 metal小米的型号是:MI 5X ...

  10. Ubuntu 修改apt-get源为阿里源

    原文件重命名备份 sudo mv /etc/apt/sources.list /etc/apt/source.list.bak 编辑源列表文件 sudo vim /etc/apt/sources.li ...