一个 App 通常会有多个界面,每个界面实现不同的功能,并在多个界面之间跳转。在 Flutter 中多个界面的跳转是通过 Navigator 来实现的。

在 Flutter 中定义了一个 Overlay Widget 用来管理多个界面,Overlay 里面使用 Stack 来显示当前的界面。通常不直接和 Overlay 打交道,而是使用 WidgetsApp 或者 MaterialApp 中的 Navigator 来管理界面。

比如在示例项目中https://github.com/goodev/learn_flutter 9.refactor 使用了 MaterialApp 的 routes 来定义多个界面以及每个界面的 key。然后使用 Navigator.pushNamed(context, routeName); 来跳转到具体的界面。

所以在 MaterialApp 中多页面跳转主要有两个任务。

定义 routes

routes 是 MaterialApp 中的一个属性,定义了全局的界面和每个界面的 key。在 Navigator 中使用 key 来指定跳转到具体的界面。 routes 的类型为 Map<String, WidgetBuilder>,WidgetBuilder 是一个方法定义,该方法返回一个 Widget。

使用 Navigator

通常使用 Navigator.push 和 Navigator.pop 来显示一个界面和删除一个当前显示的界面。 可以把 Navigator 当做一个堆栈,里面每个 item 都是一个界面,如果要显示一个界面,则使用 Navigator.push 把界面压到堆栈中,最上面的界面就是用户可见的界面;如果要移除最上面的界面,只需要调用 Navigator.pop 从堆栈中移除。

Navigator.push 的参数为 Route,一般在 MaterialApp 中使用 MaterialPageRoute.在 MaterialPageRoute 中定义了 Route 所代表的界面的 Widget 信息。

如果使用 routes 定义了全局的路由信息,则可以使用 Navigator.pushNamed 函数来显示一个具体的界面。

定义各种路由

在 Flutter 中,像 对话框、菜单、Dropdown 下拉选项、BottomSheet 等都是通过显示一个 Route 实现的。在 Flutter 中有三种路由:PopupRouteModalRoute, 和 PageRoute。 使用这些 路由可以实现各种弹出界面的情况。

============================================================================================================

PopupRoute<T> class

A modal route that overlays a widget over the current route.

https://docs.flutter.io/flutter/widgets/PopupRoute-class.html

最新文章

  1. Monkey基础
  2. [Redis]Redis 概述及基本使用规范.
  3. EnumMap
  4. Zerojudge解题心得
  5. C# 匿名委托、匿名方法、匿名对象、Lambda表达式
  6. QQ登入(4)QQ分享-内容转载
  7. error opening registry key software/javasoft/java runtime environment
  8. Objective-C的反射
  9. 选择器,$(&quot;A+B&quot;) 和$(&quot;A~B&quot;) 的理解
  10. Java中的封装、继承、多态
  11. openflow 和 sdn (软件定义网络) 原理和教程
  12. 使用async await 封装 axios
  13. DataGridView 多列排序功能
  14. 【个人阅读】软件工程M1/M2做一个总结
  15. pandas 定位 loc,iloc,ix
  16. ToString()格式和用法大全,C#实现保留两位小数的方法
  17. jquery 获取子元素的限制jquery
  18. HUE配置HIVE
  19. Web Application Stress 对网站进行压力测试
  20. 中国标准时间、‘yyyy-MM-dd’格式时间转为时间戳

热门文章

  1. 使用npm安装webpack失败时,可能被墙要为cmd命令行设置代理
  2. 怎么用js编写1——100的质数?
  3. Xcode - 因为证书问题经常报的那些错
  4. 11.7luffycity项目(2)
  5. POJ - 3279(枚举+暴力)
  6. php数组函数大全
  7. Python学习之旅(二十)
  8. css学习_css定位
  9. Java学习-050-AES256 之 java.security.InvalidKeyException: Illegal key size or default parameters 解决方法
  10. 4、Flutter 采坑记录篇二_依赖库不兼容