Navigator

Navigator用来管理堆栈功能(即push和pop),在Flutter的情况下,当我们导航到另一个屏幕时,我们使用Navigator.push方法将新屏幕添加到堆栈的顶部。当然,这些pop方法会从堆栈中删除该屏幕。

在push的时候使用自定义方法构建一个路由

   Navigator.push(
context,
MaterialPageRoute(builder:(context) => new InfoPage(product: products[index]))
);

这种方式可以传递参数。

使用Navigator的pop返回可返回上一级,并携带一个参数

Navigator.pop(context,'携带参数'); 

push和pushNamed

push与pushNames运行效果相同,只是接口的调用方式不同, 都是将一个界面压入栈中. 区别在于, push是亲手把界面扔入栈中, 而pushNames则是通过点名的方式通过router让界面自己进入栈中

// push的调用方法
Navigator.push(context, new MaterialPageRoute(
builder: (context) {
return Scaffold(
appBar: AppBar(
title: Text('我是新的界面'),
)
);
}
)); // pushNamed的调用方法
// 先在Router上定义Page;
routes: <String, WidgetBuilder> {
'/xiaoming': (_) => new XiaoMingPage(),
}
...
Navigator.pushNamed(context, '/XiaoMingPage');

实例地址:https://www.cnblogs.com/joe235/p/11242354.html

 直接返回上上级 
Navigator.of(context)..pop()..pop();

替换路由:

比如A页面点击注册,跳到B页面,B页面点击下一步跳到C页面,C页面点击完成跳回A页面。

在B页面点击下一步的时候,使用替换路由跳到C页面,这时如果点击左上角返回按钮,直接返回到A页面。

Navigator.of(context).pushReplacementNamed('/registerSecond'); //替换路由

子页面向父级页面pop()传参

返回数据的方式:

Navigator.pop(context,'xxx'); //xxx就是返回的参数

pop()传参是当页面B返回到页面A时,页面A通过.then()接收,代码如下:

Navigator.push(
context,
MaterialPageRoute(builder: (BuildContext context){
return PageB(
userName: '张三',
userAge: '18岁',
);
})).then((userInfo){
setState(() {
backResult = userInfo;
});
});

在B页面中直接把需要传的参数放入pop()中即可,代码如下:

String userInfo = '对不起,今天已经打过卡了!';
Navigator.of(context).pop(userInfo);

直接返回根,主页面:

//表示把前面导航置为空,记得要引入IndexPage页
Navigator.of(context).pushAndRemoveUntil(
new MaterialPageRoute(builder:(context) => new IndexPage()),
(route) => route == null
);

返回BottomNavigationBarItem指定页面:

首先要修改IndexPage页

class IndexPage extends StatefulWidget {
final index; //增加index参数
IndexPage({Key key,this.index = }) : super(key: key); //不传默认0 _IndexPageState createState() => _IndexPageState(this.index);
} class _IndexPageState extends State<IndexPage> {
_IndexPageState(index){ //增加构造函数
this.currentIndex = index;
} //int currentIndex = 0; //当前索引
int currentIndex; //当前索引 }

当前代码页:

//返回指定tab页
Navigator.of(context).pushAndRemoveUntil(
new MaterialPageRoute(builder:(context) => new IndexPage(index:)),
(route) => route == null //表示把前面导航置为空,要引入IndexPage页
);

最新文章

  1. 字符型图片验证码识别完整过程及Python实现
  2. js运动框架之掉落的扑克牌(重心、弹起效果)
  3. jQuery回车键提交表单
  4. [转载] Windows + IIS + PHP 配置
  5. 修改Win7远程桌面端口
  6. jdbc mysql 取数,突然取不到数据,数据库中有数据
  7. SQLSERVER2000以上 Ad Hoc Distributed Queries的启用与关闭
  8. Memcached原理
  9. POJ1664(简单动态规划)
  10. nova创建虚拟机源码分析系列之六 api入口create方法
  11. 自学WPF之XAML(一)概念
  12. Eclipse多平台编译(armeabi, armeabi-v7a, x86, mips)
  13. 第四章&#183; Redis的事务、锁及管理命令
  14. 剑指offer数组3
  15. [luogu4462][异或序列]
  16. 查漏补缺之开g的正则
  17. 容器监控—阿里云&amp;容器内部服务监控
  18. PHP二维数组排序(感谢滔哥lvtao.net)
  19. Verilog 奇数分频
  20. 【移动端debug-5】可恶的1px万能实现方案

热门文章

  1. c# json数据解析——将字符串json格式数据转换成对象或实体类
  2. pyqt pyside qcombobox disable wheel scrolling
  3. 用python计算最高投标限价
  4. Python+request 登录接口reponse的返回值token跨py文件的传递《二》
  5. 「Django」Xadmin应用
  6. python numpy的基本操作
  7. 避免Double数据显示为科学记数
  8. Reflect对象
  9. MySQL Index 索引提示:force or use
  10. java项目添加log4j打印日志+转换系统时间