Flutter中的替换路由、返回到根路由
替换路由
当我们有三个页面,页面1,页面2,页面3。
期望点击页面1按钮,跳转到页面2,页面2点击返回,跳转到页面1;
点击页面2按钮,跳转到页面3,页面3点击返回,跳转到页面1,而不是页面2。
这时就可以用替换路来实现了。
在页面2点击按钮,跳转到页面3的时候,实际上是页面3替换页面2,这时点击返回就是页面1了。
import 'package:flutter/material.dart'; void main() {
final routes = {
"/":(context) => FirstPage(),
"/secondPage":(context) => SecondPage(),
"/thirdPage":(context) => ThirdPage()
}; var onGenerateRoute = (RouteSettings setttings) {
final String name = setttings.name;
final Function pageContentBuilder = routes[name]; if (pageContentBuilder != null) {
if(setttings.arguments != null) {
final Route route = MaterialPageRoute(
builder: (context) => pageContentBuilder(context,arguments:setttings.arguments)
);
return route;
}else{
final Route route = MaterialPageRoute(
builder: (context) => pageContentBuilder(context)
);
return route;
}
}
return null;
}; runApp(MaterialApp(
title: "Navigator",
initialRoute: "/",
onGenerateRoute: onGenerateRoute,
));
} class FirstPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("第一页")),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children : <Widget>[
RaisedButton(
child: Text("跳转到下一页"),
onPressed: () {
Navigator.of(context).pushNamed("/secondPage");
},
)
]
),
);
}
} class SecondPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("第二页")),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children : <Widget>[
RaisedButton(
child: Text("跳转到下一页"),
onPressed: () {
Navigator.of(context).pushReplacementNamed("/thirdPage"); // 替换路由
},
),
RaisedButton(
child: Text("返回到第一页"),
onPressed: () {
Navigator.of(context).pop();
},
)
]
),
);
}
} class ThirdPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("第三页")),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children : <Widget>[
RaisedButton(
child: Text("返回到第一页"),
onPressed: () {
Navigator.of(context).pop(); // 因为替换了路由的原因,直接pop()就可以了
},
)
]
),
);
}
}
返回到根路由
import 'package:flutter/material.dart'; void main() {
final routes = {
"/":(context) => HomePage(),
"/firstPage":(context) => FirstPage(),
"/secondPage":(context) => SecondPage(),
"/thirdPage":(context) => ThirdPage()
}; runApp(MaterialApp(
title: "Navigator",
initialRoute: "/",
routes: routes,
));
} class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("首页")),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children : <Widget>[
RaisedButton(
child: Text("注册"),
onPressed: () {
Navigator.of(context).pushNamed("/firstPage");
},
)
]
),
);
}
} class FirstPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("注册-第一步")),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children : <Widget>[
Text("请填入手机号码"),
RaisedButton(
child: Text("下一步"),
onPressed: () {
Navigator.of(context).pushNamed("/secondPage");
},
),
]
),
);
}
} class SecondPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("注册-第二步")),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children : <Widget>[
Text("请输入手机验证码"),
RaisedButton(
child: Text("下一步"),
onPressed: () {
Navigator.of(context).pushNamed("/thirdPage");
},
)
]
),
);
}
} class ThirdPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("注册-第三步")),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children : <Widget>[
Text("请输入密码并确认"),
RaisedButton(
child: Text("完成"),
onPressed: () {
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute(
builder: (context) => HomePage()), (route) => route == null);
},
)
]
),
);
}
}
Flutter中的替换路由、返回到根路由的更多相关文章
- 18Flutter中的路由、路由替换、返回到根路由:
路由: 正常跳转: Navigator.pushNamed(context,'/product'); 路由替换: Navigator.pushReplacementNamed(context, ' ...
- Flutter 中的路由
Flutter 中的路由通俗的讲就是页面跳转.在 Flutter 中通过 Navigator 组件管理路由导航. 并提供了管理堆栈的方法.如:Navigator.push 和 Navigator.po ...
- flutter中的路由跳转
在前面的基本路由和命名路由中,都演示了如何进行路由跳转,并且在路由跳转以后,可以借用系统自带的按钮就行返回上一级,当然了,也可以自定义按钮返回上一级. 返回上一级 在前面的例子中,当从Home.dar ...
- Flutter中管理路由栈的方法和应用
原文地址:https://www.jianshu.com/p/5df089d360e4 本文首先讲的Flutter中的路由,然后主要讲下Flutter中栈管理的几种方法. 了解下Route和Navig ...
- Flutter中的普通路由与命名路由(Navigator组件)
Flutter 中的路由通俗的讲就是页面跳转.在 Flutter 中通过 Navigator 组件管理路由导航.并提供了管理堆栈的方法.如:Navigator.push 和 Navigator.pop ...
- flutter中的命名路由
命名路由是区别于基本路由的一种存在,方便于大型项目中路由的统一管理,现在,在前面基本路由的项目基础上实现实现命名路由. 使用步骤 路由配置 命名路由在使用前,需要在根组件main.dart中进行简单的 ...
- Flutter 中的基本路由
Flutter 中的路由通俗的讲就是页面跳转.在 Flutter 中通过 Navigator 组件管理路由导航,并提供了管理堆栈的方法.如:Navigator.push 和 Navigator.pop ...
- flutter 登录后跳转到根路由
flutter 登录以后 会有返回箭头显示 因为 路由的切换导致不是路由的第一个页面,解决办法清空路由. Navigator.of(context).pushAndRemoveUntil( new ...
- flutter 跳转至根路由
上代码 //flutter 登录后跳转到根路由 Navigator.of(context).pushAndRemoveUntil( new MaterialPageRoute(builder: (co ...
随机推荐
- 利用python求解物理学中的双弹簧质能系统详解
利用python求解物理学中的双弹簧质能系统详解 本文主要给大家介绍了关于利用python求解物理学中双弹簧质能系统的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 物理的 ...
- Release报错Debug无错
代码在Release模式下会crash,Debug模式下可以运行,最后定位到原因 for (size_t j = 0; j < ids.size()-1; ++j) { } 发现问题是Relea ...
- Swift学习 (二)
2.控制流: 主要有三种类型的语句 if,switch和新增的guard for,while break,continue 关于if 语句里的条件不再需要使用()包裹了. 1 2 3 4 let nu ...
- 【Leetcode_easy】605. Can Place Flowers
problem 605. Can Place Flowers 题意: solution1: 先通过简单的例子(比如000)发现,通过计算连续0的个数,然后直接算出能放花的个数,就必须要对边界进行处理, ...
- linux查看物理cpu的核数,个数,逻辑cpu的个数
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数 cat /proc/cpuinfo| ...
- Egret入门学习日记 --- 第一篇 (引擎的选择)
第一篇 (引擎的选择) 我人比较笨,得慢慢学,我就一点一点来好了. 首先,我个人喜欢游戏.网页开发相对游戏开发来说,网页开发实在太枯燥了,没劲.所以打算转游戏开发了. 游戏开发要选择游戏引擎,我去看了 ...
- 原装win8系统电脑崩溃问题解决
原装win8系统电脑崩溃问题解决 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:之所以撰写本篇关于win8原装系统电脑崩溃的博文,一是要吐槽一下原装w ...
- 按CSS查询一个元素
按CSS查询 示例1 查询一个 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 < ...
- java调用jacob组件实现word转pdf,HTML等出现的问题
1.部署项目的服务器上必须安装WPS或Word office: 2.将jacob.jar文件放入%JAVA_HOME%\jre中: 3.将.dll文件放入%JAVA_HOME%\jre\bin中: 4 ...
- redis 持久化 ——RDB
文章目录 RDB 关于 fork dump.rdb 文件 如何触发 RDB 快照 如何恢复 优势 劣势 停掉 RDB RDB redis database 的简写 : 在指定时间间隔后,将内存中的数据 ...