Flutter Navigator2.0使用分享

东方盛慧科技大约 3 分钟flutterflutter

Flutter Navigator2.0使用分享

flutter2.0 对Router路由进行了一次大修改,开发时涉及到项目重构,所以在此分享一下Navgator2.0的使用、原理、封装

一、引入Navigator2.0的好处

  • 原始 API 中的 initialRoute 参数,即系统默认的初始页面,在应用运行后就不能在更改了。启动后从当前的路由栈状态 [Main -> Login -> Settings] 重启切换到新的 [Main -> List -> Detail[id=24],Navigator1.0 并没有一种优雅的实现方式实现这种效果。
  • 原始的命令式 Navigator API 只提供给了开发者一些非常针对性的接口,如 push、pop 等,而没有给出一种更灵活的方式让我们直接操作路由栈。这种做法其实与 Flutter 理念相违背,如果我们想要改变某个 Widget 的所有子组件只需要重建所有子组件并且创建一系列新的 Widget 即可,而将此概念应用在路由中?当应用中存在一系列路由页面并想要更改时,我们只能调用 push、pop 这类接口来回操作,Flutter 味道全无,navigator2.0就是将widget相关的三棵树概念应用到路由中。
  • 嵌套路由下,手机设备自带的回退按钮只能由根 Navigator 响应。在目前的应用中,我们很多场景都需要在某个子 tab 内单独管理一个子路由栈,假设有这个场景,用户在子路由栈中做一系列路由操作之后,点击系统回退按钮,消失的将是整个上层的根路由,我们当然可以使用某种措施来避免这种状况,但归咎起来,这也不应该是应用开发者应该考虑的问题。

一、Navigator2.0使用

demo地址 : https://gitee.com/leixun/flutter_lx_navigatoropen in new window

二、Navigator2.0原理

Navigator 2.0 提供了一系列全新的接口,可以实现将路由状态成为应用状态的一部分,并能够通过底层 API 实现参数解析的功能,新增的 API 如下:

  • Page,用来表示 Navigator 路由栈中各个页面的配置信息。
  • Router,用来制定要由 Navigator 展示的页面列表,通常,该页面列表会根据系统或应用程序的状态改变而改变。
  • RouteInformationParser,持有 RouteInformationProvider 提供的 RouteInformation ,可以将其解析为我们定义的数据类型。
  • RouterDelegate,定义应用程序中的路由行为,例如 Router 如何知道应用程序状态的变化以及如何响应。主要的工作就是监听 RouteInformationParser 和应用状态并通过当前页面列表构建 ·。
  • BackButtonDispatcher,响应后退按钮,并通知 Router

参考技术文章:

  1. Flutter Navigator 2.0 全面解析: https://blog.csdn.net/u013491829/article/details/109330086open in new window
  2. Flutter Navigator2.0 完全指南与原理解析 https://mp.weixin.qq.com/s/hDLxWJuUylw8UaOidUa3Hgopen in new window

三、基于navigator2.0路由框架flutter_bling_router功能演示及源码讲解

框架功能:

  1. 基本的路由导航,页面跳转
  2. 支持深度链接(deeplink),url链接匹配
  3. 支持构造器初始化参数
  4. 支持App 模块化注册
  5. 支持常见的动画转场效果,也可以自定义转场

参考源码: https://github.com/coder-dongjiayi/flutter_bling_routeropen in new window

上次编辑于:
贡献者: 雷勋