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
Flutter 控件之 Routes 和 Navigator. [PopupRoute]的更多相关文章
- flutter控件之ListView滚动布局
ListView即滚动列表控件,能将子控件组成可滚动的列表.当你需要排列的子控件超出容器大小,就需要用到滚动块. import 'package:flutter/material.dart'; cla ...
- Flutter 控件之 AppBar 和 SliverAppBar
AppBar 和 SliverAppBar 是纸墨设计中的 App Bar,也就是 Android 中的 Toolbar,关于 Toolbar 的设计指南请参考纸墨设计中 Toolbar 的内容. A ...
- flutter控件之ExpansionPanelList
import 'package:flutter/material.dart'; class LearnExpansionPanelList extends StatefulWidget{ @overr ...
- flutter控件之CheckBox
import 'package:flutter/material.dart'; class LearnCheckBox extends StatefulWidget{ @override State& ...
- flutter控件之RadioButton
import 'package:flutter/material.dart'; class LearnRadioButton extends StatefulWidget{ @override Sta ...
- Flutter 的基本控件
文本控件 Text 支持两种类型的文本展示,一个是默认的展示单一样式文本 Text,另一个是支持多种混合样式的富文本 Text.rich. 单一样式文本 Text 单一样式文本 Text 的初始化,是 ...
- NFinal 视图—用户控件
自定义控件 定义控件 以Label控件为例: 1.首先在Common文件夹下添加Label.cs文件,其中代码如下: //a.control的实体类必须继承NFinal.UserControl类 pu ...
- Flutter Form表单控件超全总结
注意:无特殊说明,Flutter版本及Dart版本如下: Flutter版本: 1.12.13+hotfix.5 Dart版本: 2.7.0 Form.FormField.TextFormField是 ...
- 你知道吗,Flutter内置了10多种Button控件
注意:无特殊说明,Flutter版本及Dart版本如下: Flutter版本: 1.12.13+hotfix.5 Dart版本: 2.7.0 Flutter内置了10多种Button(按钮)类控件供我 ...
随机推荐
- JS 使用const声明常量的本质(很多人都有误解)
在我们使用const声明常量时,总认为值一旦声明就不可改变,其实是有误解的: 刚在看ES6标准文档时,仔细阅读了const的解析,恍然大悟的感觉,分享给大家. 本质 const实际上保证的,并不是变量 ...
- MYSQL中动态行数据转列数据
最近用到城市矩阵相关 需要将城市与城市距离转化为二维表 通过动态SQL直接实现 贴出来一起学习: 表就三个字段,包含在sql内. SET @sql:=''; SELECT @sql:=GROUP_CO ...
- Docker中使用redis
项目中频繁使用Redis,为了不用每次打开Redis目录去启动Redis想到了Docker可以作为Redis的容器 直接下载使用就行 把Docker使用Redis的过程分享下: 1. 拉取 ...
- [原]CentOS 7 chrony 笔记
~]# timedatectl status Local -- :: CST ==> 本地系统实际时间,设置时间timedatectl set-:: 设置日期timedatectl set- 设 ...
- ToolBar样式颜色,图标设置
extends:http://blog.csdn.net/w1054993544/article/details/48339565 <resources> <style name=& ...
- artTemplate的使用案列
(2) https://github.com/aui/art-template/wiki/syntax:simple
- Ubuntu下安装LNMP
1.安装mysql sudo apt-get install mysql-server mysql-client 2.安装nginx sudo apt-get install nginx 安装完后重启 ...
- 关于 python中的转义字符
"abc\n" 前面加 r,表示原生输出,不转义.实际上是用 \代替 \\,其实是已经转义过了,并不是不转义. 看这个例子: print(r"abc \n") ...
- loadrunner笔记(三):设置、运行场景和生成测试报告
//上一篇的代码有点问题,问题出在 web_reg_find()函数中,这个函数简单的说是搜索下一步操作的请求对象(html)页面中是否存在相应的文本字符串.所以用在登录操作中,它搜索的是主页.htm ...
- 使用正则表达式进行某网页中的email邮箱抽取
import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; impo ...