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 ...
随机推荐
- Delphi 适合于文本文件的基本操作
- centos 7 SVN安装脚本搭建主从同步灵活切换
svn 脚本下载 http://opensource.wandisco.com/subversion_installer_1.9.sh 2019-Aug-20 12:20:4810.1Kapplica ...
- 查看jar包依赖树
在eclipse执行如下命令: 可以在控制台上查看层级依赖关系
- 解决引导内核遇到undefined instruction的错误
其实在上一篇随笔之前,就是在启动linux 内核的时候,出了点问题 刚Starting kernel ...就出现了undefined instrction,这是什么问题呢? 在网上也搜了不少资料,有 ...
- Cuda9.0安装
CUDA 9.0安装笔记 最近实验室新购买两块K80的GPU.作为好奇的小猪,当然会自报奋勇去配置环境.在这篇博客中将会介绍在centos7下配置CUDA 9.0的步骤. 1. 什么是CUDA? 引用 ...
- 如何自己搭建DNS服务器
DNS服务器是计算机域名系统 (Domain Name System 或Domain Name Service) 的缩写,它是由 解析器和域名服务器组成的.域名服务器是指保存有该网络中所有主机的域名和 ...
- xss过滤方法
用的白名单过滤,是我们的论坛自用的方法,也许考虑不周,欢迎来黑我们的论坛!https://www.ebcms.com/forum.html // 安全过滤 function safe_html($ht ...
- PHP设置Redis key在当天有效
本文援引自:https://blog.csdn.net/zpf_nevergiveup/article/details/81066500 $redis->set($key,$value); $e ...
- 【leetcode】1232. Check If It Is a Straight Line
题目如下: You are given an array coordinates, coordinates[i] = [x, y], where [x, y] represents the coord ...
- Travis CI Could not find or load main class org.gradle.wrapper.GradleWrapperMain 错误
问题 在 Travis CI 编译的时候出现 Error: Could not find or load main class org.gradle.wrapper.GradleWrapperMain ...