flutter可以通过push pop跳转到上一级或者下一级

基本push跳转方法 此时仍然有返回按钮

Navigator.push(
context,
MaterialPageRoute(
builder: (context) => HomePage(),
));

跳转到其他下一级页面 没有返回按钮

   return Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => HomePage(),
));

如果需要转到指定页面,或者跳转到根控制器,通过简单的push是无法实现,这个时候,可以通过routes跳转的方式实现

实现rotues也很简单 实现以下2步即可

  1. 定义routes.dart
import 'package:flutter/material.dart';
//引入文件
import 'tabbar.dart';
import 'module/login.dart';
import 'module/home.dart';
import 'module/mine.dart';
import 'module/bank.dart';
import 'module/card.dart';
import 'module/contactkefu.dart';
import 'module/evaluation.dart';
import 'module/order.dart';
import 'module/wallet.dart'; //配置路由规则
final routes = {
//Map<String, WidgetBuilder>
"/tabbar": (context) => Tabbar(),
"/home": (context) => HomePage(),
"/login": (context) => LoginPage(),
"/mine": (context) => MinePage(),
"/bank": (context) => BankCardPage(),
"/card": (context) => CardSubmit(),
"/kefu": (context) => ContactKefu(),
"/order": (context) => OrderPage(),
"/evaluation": (context) => Edevaluation(),
"/wallet": (context) => Wallet(),
'/pagetest': (context,{arguments}) => PageTest(arguments:arguments), //通过这种方式可以配置传递参数
}; // 如果你要把路由抽离出去,必须写下面这一堆的代码,不用理解什么意思
var onGenerateRoute = (RouteSettings settings) {
// 统一处理
final String name = settings.name;
final Function pageContentBuilder = routes[name];
if (pageContentBuilder != null) {
if (settings.arguments != null) {
final Route route = MaterialPageRoute(
builder: (context) =>
pageContentBuilder(context, arguments: settings.arguments));
return route;
} else {
final Route route =
MaterialPageRoute(builder: (context) => pageContentBuilder(context));
return route;
}
}
};

2.在MaterialApp初始化路由

import 'package:flutter/material.dart';
import 'tabbar.dart';
import 'routes.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
initialRoute: '/', //配置默认访问路径
onGenerateRoute:onGenerateRoute, //必须加上这一行,固定写法
theme: new ThemeData(
brightness: Brightness.light,
primaryColor: Colors.white,
),
home: Tabbar(),
);
}
}

这样就可以通过下面这种方式跳转到指定页面

Navigator.of(context).pushNamed('/home');

通过上面自定义路由的方式push控制器的时候如果需要传递参数也是可以实现的arguments是map类型

routes.dart中 配置
'/pagetest': (context,{arguments}) => PageTest(arguments:arguments), 传递参数方法
Navigator.pushNamed(context, "/pagetest",arguments: {
"id":102
})

如果跳转到指定页面 并且移除栈中所有控制器

Navigator.of(context).pushNamedAndRemoveUntil('/home', (Route<dynamic> route) => false);

push到screen4并压入到screen1上 同时移除栈中screen1之前所有的页面

Navigator.of(context).pushNamedAndRemoveUntil('/screen4',ModalRoute.withName('/screen1'));

参考来源:

https://zhuanlan.zhihu.com/p/56289929 Flutter中管理路由栈的方法和应用

https://juejin.im/post/5d875dea5188253f9f39b54e Flutter 路由跳转及传值详解(Navigator的使用)

flutter routes跳转的更多相关文章

  1. Flutter路由跳转及参数传递

    本文要介绍的知识点 用路由推出一个新页面 打开新页面时,传入参数 参数的回传 路由 做Android/iOS原生开发的时候,要打开一个新的页面,你得知道你的目标页面对象,然后初始化一个Intent或者 ...

  2. Flutter Navigator 跳转

    1,routes 静注册,使用 跳转 Navigator.pushNamed(context, "/main"); 2,静态跳转及销毁当前页面使用 Navigator.pushNa ...

  3. flutter -------- 页面跳转和传值

    在安卓原生开发中,页面跳转可以用Intent类来具体实现: Intent intent =new Intent(MainActivity.this,second.class); startActivi ...

  4. Flutter页面跳转返回数据

    Dart中的异步请求和等待和ES6中的方法很像,直接使用async...await就可以实现. 核心代码: _navigateToAddress(BuildContext context) async ...

  5. Flutter路由跳转父级页面向子页面传参及子页面向父级页面传参

    Flutter中页面通过路由跳转传参主要分两种,一种是通过push()跳转时根据设定的参数进行传参,另一种是通过pop()返回时进行传参. 父级页面向子页面push()传参 假设从A页面跳到B页面可能 ...

  6. Flutter 页面入栈和出栈

    Docs demo import 'package:flutter/material.dart'; void main() => runApp(new MyApp()); class MyApp ...

  7. Flutter混合栈的管理

    Flutter出现的目的旨在统一Android/IOS两端编程,因此完全基于Flutter开发的App,只需提供一个包含FlutterView的页面,后续页面增加/删除/跳转均在FlutterView ...

  8. Flutter路由的跳转、动画与传参(最简单)

    跳转 命名路由 在文件构建时先设置路由参数: new MaterialApp( // 代码 routes: { "secondPage":(BuildContext context ...

  9. Flutter 控件之 Routes 和 Navigator. [PopupRoute]

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

随机推荐

  1. PXE自动化部署

    PXE 预启动执行环境,基于tftp条件下完成基于网络的自动化部署软件 原理: 网卡利用自身的tftp 请求dhcp 服务器获取ip和一个pxelinux.0的地址 在给定的tftp目录下存有ks的配 ...

  2. linux系统使用grep命令提取文件的基名或者路径名

    效果等于~]#dirname /etc/sysconfig/network-scripts/ifcfg-ens33 echo "/etc/sysconfig/network-scripts/ ...

  3. composer入门教程

    初始化项目 使用composer初始化工作目录,在项目的根目录命令行输入 composer init 安装项目 在composer.json文件所在目录命令行下执行如下命令 php composer. ...

  4. Summer training round2 #3

    A!:                    GTY系列题 B!:莫队加分块  GTY系列题 C!:线段树模拟拓扑排序(把普通的拓扑排序的栈操作改成线段树区间减一,查询区间最右侧的0的位置即可.注意一 ...

  5. Mongodb的基本操作-数据库 集合 文档的增删改查

    数据库操作: //查看有哪些数据库 > show dbs local  0.078GB mydb   0.078GB //use操作将切换到一个数据库 如果数据库存在将直接切换 如果不存在 那么 ...

  6. Acwing-116-飞行员兄弟(二进制枚举)

    链接: https://www.acwing.com/problem/content/description/118/ 题意: "飞行员兄弟"这个游戏,需要玩家顺利的打开一个拥有1 ...

  7. CNN简略总结

    https://blog.csdn.net/real_myth/article/details/51824193 池化层的作用: 感受野变化...?? 1*1卷积核的作用 1. 实现跨通道的交互和信息 ...

  8. electron-vue 引入 vue.ant.design报错

    ERROR in ./node_modules/ant-design-vue/dist/antd.less (./node_modules/css-loader!./node_modules/less ...

  9. DOM添加

    ㈠添加元素的步骤 ⑴创建空元素 ⑵设置关键属性 ⑶将元素添加到DOM树   ㈡创建空元素 var elem = document.createElement('table');   示例: var t ...

  10. LA 3263 好看的一笔画 欧拉几何+计算几何模板

    题意:训练指南260 #include <cstdio> #include <cstring> #include <algorithm> #include < ...