Flutter使用Navigator进行路由管理。

跳转页面

使用Navigator的push方法进行跳转。可以看到总共有6个push方法

1、push(route) 通过路由跳转

通过路由进行跳转

          Navigator.of(context).push(MaterialPageRoute(builder: (context){return MyApp();}));

也可以直接使用Navigator.push(context, route)进行跳转,直接push的方法里面还用调用的 Navigator.of(context).push(route)。如下图

2、pushNamed(routeName) 通过路由名称跳转

调用该方法前需要先到MaterialApp下注册路由表,然后给路由命名

注册路由表
      routes: {"my_app" : (context) => MyApp(),//其它路由},

routes是一个Map集合,key就是路由名

通过路由名跳转:

Navigator.of(context).pushNamed("my_app");

3、pushAndRemoveUntil()和pushNamedAndRemoveUntil()

还是通过路由和路由名跳转的,和上面两个区别是使用此方法跳转的路由会处于栈顶,并把之前的路由清除掉。类似于Android
singleTask启动模式。

        Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context)=>MyApp()),(route)=>route == null);

使用此方法跳转到新页面,在按返回键则会直接退出程序。

 Navigator.of(context).pushNamedAndRemoveUntil("my_app",(route)=>route == null);

4、pushReplacement()和pushReplacementNamed()

路由替换,第二个参数result是个可选参数,如果不传就替换成newRoute,如果传则替换成result。

    Navigator.of(context).pushReplacement(MaterialPageRoute(builder: (context)=>MainPage())});Navigator.of(context).pushReplacementNamed("my_app");

pop()出栈,关闭页面

关闭当前页面

 Navigator.of(context).pop();
接收上个页面的返回值


所有的push方法都会有个Future回调。我们可以在Future中接收返回值。

          Future future = Navigator.of(context).pushNamed("my_app");future.then((value){});

future的回调方法中会收到一个value值。

pop([ T result ]) pop有个可选参数result,关闭页面的时候传递一个result给上个界面

Navigator.of(context).pop("test");

上个页面的future就会收到值为test的回调

Flutter路由管理和接收页面的返回值相关推荐

  1. Bolt 的 Flutter 路由管理实践(页面解耦,流程控制、功能拓展等)

    在各大移动开发框架(Android.iOS.Flutter.React Native-)中,路由管理始终是 UI 架构最具热议的话题之一. 一大原因就是应用程序的页面会 不可避免的多,我们可以使用 B ...

  2. Flutter路由管理和页面参数的传递(获取返回)

    前言 在做 Flutter 开发的时候所有的页面以及页面上的元素都变成了 Widget ,创建一个页面或者视图直接 new 一个新的 widget 就可以,相关的参数我们可以直接通过构造函数直接传递. ...

  3. Flutter路由管理和页面参数的传递(源码分析)

    前言 上一篇 Flutter路由管理和页面参数的传递(获取&返回) 文章中我们讲述了这么用代码实现 Flutter 中页面参数的传递,这一篇我们用源码分析一下 Navigator 为什么可以进 ...

  4. Flutter系列-flutter路由管理

    Flutter路由管理 初识路由概念 一.路由管理 1.1.Route 1.2.MaterialPageRoute 1.3.Navigator 1.4.路由传值 1.5 命名路由 1.6.命名路由参数 ...

  5. Flutter路由管理代码这么长长长长长,阿里工程师怎么高效解决?(实用)

    背景: 在flutter的业务开发过程中,flutter侧会逐渐丰富自己的路由管理.一个轻量的路由管理本质上是页面标识(或页面路径)与页面实例的映射.本文基于dart注解提供了一个轻量路由管理方案.  ...

  6. 【C 语言】C 项目开发代码规范 ( 形参合法性判断 | 函数返回值局部变量 | 函数中不用全局变量 | 函数中使用局部变量接收形参 | 函数返回值 | 形参作返回值 | 形参返回值处理 )

    文章目录 一.C 项目开发代码规范 一.C 项目开发代码规范 上一篇博客 [C 语言]字符串模型 ( 键值对模型 ) 中 , 完成了字符串的 键值对 查找功能 , 代码不太规范 ; C 项目开发代码规 ...

  7. cmd管道无法接收特定程序返回值_渗透不会反弹shell?来教你写一个cmd的shell

    渗透不会反弹shell?来教你写一个cmd的shell 包含的库: #include #include #include #include #include #pragma comment(lib, ...

  8. JDBC和JPA调用储存过程 接收存储过程有返回值

    ============jdbc========================================== --java代码:一个输出参数-- String connURL = null; ...

  9. jsp中接收java的返回值_jsp中request的一些方法返回值

    在页面上打印如下内容,通过服务器本地和客户端异地调用的结果如下 String url111 = request.getRequestURI(); System.out.println("ur ...

最新文章

  1. 报javax.servlet.ServletException: Servlet.init() for servlet springmvc threw exception异常 的解决方案...
  2. Java高并发编程基础之AQS
  3. python网上编程课程-什么是Python编程课程
  4. 一句话设置当前控制器的view跟随键盘起伏,妈妈再也不用担心键盘挡住输入框了...
  5. linux课程设计qq,仿QQ聊天系统课程设计.doc
  6. 【Python】第一个程序---Helloworld!
  7. 全网首发:神奇的WORD文字渲染效果,18个字符一组,每个字符渲染效果不同
  8. 计算机3d相册代码,CSS3实现3D旋转相册(示例代码)
  9. Redis报错:WRONGTYPE Operation against a key holding the wrong kind of value
  10. 【参考文献】软骨细胞生长培养方法
  11. 计算机及应用课程实验,计算机网络及应用课程实验指导书
  12. 考研:研究生考试(五天学完)之《线性代数与空间解析几何》研究生学霸重点知识点总结之第四课欧氏空间
  13. python生成exe运行慢_利用pyinstaller生成exe文件碰到的一些问题及解决方法
  14. Pell方程初识以及技巧性的求解Pell方程整数解(附带手推详细证明)
  15. 超硬核!MySQL优化从执行计划开始(explain超详细)
  16. QQ收集表图片批量导出
  17. 格子路径问题-施罗德数
  18. 用c语言写一个简易的四则运算计算器
  19. [LINUX]解决Linux下ubuntu 20.04暂时不能解析域名“cn.archive.ubuntu.com”问题
  20. 专升本英语 学习笔记

热门文章

  1. SSD_装了ssd后,右下角的那个安全删除硬件的标志要怎么去掉?
  2. 二等水准测量记录数据_二等水准测量记录计算示例.doc
  3. 重读经典(CLIP上):《Learning Transferable Visual Models From Natural Language Supervision》
  4. python3下载手机安卓版,python3.0手机版下载
  5. 【HigherHRNet】 HigherHRNet 详解之 HigherHRNet的热图回归代码
  6. 【抽样技术】CH2 简单随机抽样
  7. ati自定义分辨率_真三国无双7游戏自定义分辨率的修改方法
  8. 同花顺面经(二面挂)
  9. Android 强大的图片加载缓存— Glide
  10. ear的英语怎么念_ear英语怎么读谐音