flutter routes跳转
flutter可以通过push pop跳转到上一级或者下一级
基本push跳转方法 此时仍然有返回按钮
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => HomePage(),
));
跳转到其他下一级页面 没有返回按钮
return Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => HomePage(),
));
如果需要转到指定页面,或者跳转到根控制器,通过简单的push是无法实现,这个时候,可以通过routes跳转的方式实现
实现rotues也很简单 实现以下2步即可
- 定义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跳转的更多相关文章
- Flutter路由跳转及参数传递
本文要介绍的知识点 用路由推出一个新页面 打开新页面时,传入参数 参数的回传 路由 做Android/iOS原生开发的时候,要打开一个新的页面,你得知道你的目标页面对象,然后初始化一个Intent或者 ...
- Flutter Navigator 跳转
1,routes 静注册,使用 跳转 Navigator.pushNamed(context, "/main"); 2,静态跳转及销毁当前页面使用 Navigator.pushNa ...
- flutter -------- 页面跳转和传值
在安卓原生开发中,页面跳转可以用Intent类来具体实现: Intent intent =new Intent(MainActivity.this,second.class); startActivi ...
- Flutter页面跳转返回数据
Dart中的异步请求和等待和ES6中的方法很像,直接使用async...await就可以实现. 核心代码: _navigateToAddress(BuildContext context) async ...
- Flutter路由跳转父级页面向子页面传参及子页面向父级页面传参
Flutter中页面通过路由跳转传参主要分两种,一种是通过push()跳转时根据设定的参数进行传参,另一种是通过pop()返回时进行传参. 父级页面向子页面push()传参 假设从A页面跳到B页面可能 ...
- Flutter 页面入栈和出栈
Docs demo import 'package:flutter/material.dart'; void main() => runApp(new MyApp()); class MyApp ...
- Flutter混合栈的管理
Flutter出现的目的旨在统一Android/IOS两端编程,因此完全基于Flutter开发的App,只需提供一个包含FlutterView的页面,后续页面增加/删除/跳转均在FlutterView ...
- Flutter路由的跳转、动画与传参(最简单)
跳转 命名路由 在文件构建时先设置路由参数: new MaterialApp( // 代码 routes: { "secondPage":(BuildContext context ...
- Flutter 控件之 Routes 和 Navigator. [PopupRoute]
一个 App 通常会有多个界面,每个界面实现不同的功能,并在多个界面之间跳转.在 Flutter 中多个界面的跳转是通过 Navigator 来实现的. 在 Flutter 中定义了一个 Overla ...
随机推荐
- shell 删除文本中的重复行
三种常见方法:第一,用sort+uniq,注意,单纯uniq是不行的. shell> sort -k2n file | uniq > a.out 这里我做了个简单的测试,当file中的重复 ...
- Delphi RadioGroup 组件
- 2019-2020-1 20199319《Linux内核原理与分析》第四周作业
MenuOS的构造 基础知识 1.操作系统的两把宝剑:①中断上下文的切换:保存现场和恢复现场:②进程上下文的切换. 2.Linux内核以A.B.C.D方式命名:A和B变得无关紧要,C是内核的真实版本, ...
- mysql总结1
修改表名:alter table table_name rename new_table_name; 添加字段:alter table table_name add column_name type_ ...
- Android Studio 创建项目后“Cannot resolve symbol” 解决办法
报错位置显示 “Cannot resolve symbol XXX”, 解决方法如下: 点击菜单中的 “File” -> “Invalidate Caches / Restart”,然后点击对话 ...
- 1、检查并修改mysql的my.ini的配置文件
代码如下: default-character-set=utf8 2.建立数据库是要指定字符集 代码如下: create database mydb default character set utf ...
- qt5---资源文件
创建资源文件: 视频教程:https://www.bilibili.com/video/av66748323/ 右击工程目录--->-->--> 添加资源: 右击资源文件--> ...
- Jenkins环境搭建遇到的问题
参考文章 https://www.cnblogs.com/yuanluo9898/p/10724252.html 问题一:tomcat启动乱码,如图所示 解决方案:https://blog.csdn. ...
- 树莓派设定笔记(Raspberry Pi 3 B+)
树莓派默认用户名密码 pi / raspberry 一.启用root用户 设置root用户密码 sudo passwd root 开启root账户 sudo passwd --unlock root ...
- Angular7和leaflet一起使用时的作用域不一致
Angular7和leaflet一起使用时的作用域不一致问题,使用(e) =>可以完美解决. 使用原始的JavaScript: map.on("click", functio ...