Flutter 控件之 Routes 和 Navigator. [PopupRoute]
一个 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 中有三种路由:PopupRoute, ModalRoute, 和 PageRoute。 使用这些 路由可以实现各种弹出界面的情况。
============================================================================================================
PopupRoute<T> class
A modal route that overlays a widget over the current route.
https://docs.flutter.io/flutter/widgets/PopupRoute-class.html
最新文章
- Monkey基础
- [Redis]Redis 概述及基本使用规范.
- EnumMap
- Zerojudge解题心得
- C# 匿名委托、匿名方法、匿名对象、Lambda表达式
- QQ登入(4)QQ分享-内容转载
- error opening registry key software/javasoft/java runtime environment
- Objective-C的反射
- 选择器,$(";A+B";) 和$(";A~B";) 的理解
- Java中的封装、继承、多态
- openflow 和 sdn (软件定义网络) 原理和教程
- 使用async await 封装 axios
- DataGridView 多列排序功能
- 【个人阅读】软件工程M1/M2做一个总结
- pandas 定位 loc,iloc,ix
- ToString()格式和用法大全,C#实现保留两位小数的方法
- jquery 获取子元素的限制jquery
- HUE配置HIVE
- Web Application Stress 对网站进行压力测试
- 中国标准时间、‘yyyy-MM-dd’格式时间转为时间戳
热门文章
- 使用npm安装webpack失败时,可能被墙要为cmd命令行设置代理
- 怎么用js编写1——100的质数?
- Xcode - 因为证书问题经常报的那些错
- 11.7luffycity项目(2)
- POJ - 3279(枚举+暴力)
- php数组函数大全
- Python学习之旅(二十)
- css学习_css定位
- Java学习-050-AES256 之 java.security.InvalidKeyException: Illegal key size or default parameters 解决方法
- 4、Flutter 采坑记录篇二_依赖库不兼容