效果图:

Setting.dart
RegisterFirst.dart

RegisterSecond.dart

RegisterThird.dart

无相关的页面代码架构请参考:flutter实现页面跳转、跳转传值(命名路由、命名路由传值)

主要变动:

这里负责贴主要代码:

Login.dart

import 'package:flutter/material.dart';class LoginPage extends StatelessWidget{@overrideWidget build(BuildContext context) {// TODO: implement buildreturn Scaffold(appBar: AppBar(title: Text('登录'),),body: Center(child: Column(children: <Widget>[SizedBox(height: 40,),Text('这是一个登录页面,点击登录会执行登录操作'),RaisedButton(child: Text('登录'),onPressed: (){},)],),),);}
}

RegisterFirst.dart

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';class RegisterFirstPage extends StatelessWidget {const RegisterFirstPage({Key key}) : super(key: key);@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("第一步-输入手机号")),body:Column(children: <Widget>[SizedBox(height: 40),Text("这是注册的第一步,请输入您的手机号 然后点击下一步"),SizedBox(height: 40),RaisedButton(child: Text('下一步'),onPressed: (){//                 Navigator.pushNamed(context, '/registerSecond');//替换路由// 表示点击按钮时跳转到第二个页面,并且是一种替换,简单来说可以理解为被销毁的意思Navigator.of(context).pushReplacementNamed('/registerSecond');},)],));}
}

RegisterSecond.dart

import 'package:flutter/material.dart';class RegisterSecondPage extends StatelessWidget {const RegisterSecondPage({Key key}) : super(key: key);@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("第二步-验证码")),body:Column(children: <Widget>[SizedBox(height: 40),Text("输入验证码完成注册"),SizedBox(height: 40),RaisedButton(child: Text('下一步'),onPressed: (){Navigator.pushNamed(context, '/registerThird');//替换路由
//            Navigator.of(context).pushReplacementNamed('/registerThird');},)],));}
}

RegisterThird.dart

import 'package:flutter/material.dart';
import 'package:flutter_app15/pages/Tabs.dart';class RegisterThirdPage extends StatelessWidget {const RegisterThirdPage({Key key}) : super(key: key);@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("第三步-完成注册")),body:Column(children: <Widget>[SizedBox(height: 40),Text("输入密码完成注册"),SizedBox(height: 40),RaisedButton(child: Text('确定'),onPressed: (){/***  返回根           pushAndRemoveUntil*  实现原理:*  1、首先先将所有的路由全部置为空                 (route) => route == null*  2、然后再跳转回根路由                new MaterialPageRoute(builder: (context) => new Tabs()),*/Navigator.of(context).pushAndRemoveUntil(new MaterialPageRoute(builder: (context) => new Tabs(index:1)),(route) => route == null);},)],));}
}

Setting.dart

import 'package:flutter/material.dart';class SettingPage extends StatefulWidget {@override_SettingPageState createState() => _SettingPageState();
}class _SettingPageState extends State<SettingPage> {@overrideWidget build(BuildContext context) {return Column(children: <Widget>[Column(children: <Widget>[ListTile(title: Text('我是一个文本'),),ListTile(title: Text('我是一个文本'),),ListTile(title: Text('我是一个文本'),),ListTile(title: Text('我是一个文本'),),ListTile(title: Text('我是一个文本'),)],),RaisedButton(child: Text('跳转到登录页面'),onPressed: (){Navigator.pushNamed(context, '/login');},),RaisedButton(child: Text('跳转到注册页面'),onPressed: (){Navigator.pushNamed(context, '/registerFirst');},)],);}
}


Routes.dart

import 'package:flutter_app15/pages/user/RegisterThird.dart';import '../pages/Form.dart';
import '../pages/Search.dart';
import '../pages/Tabs.dart';
import '../pages/Product.dart';
import '../pages/ProductInfo.dart';import '../pages/user/Login.dart';
import '../pages/user/RegisterFirst.dart';
import '../pages/user/RegisterSecond.dart';
import '../pages/user/RegisterThird.dart';import 'package:flutter/material.dart';//配置路由
final  routes={                   //配置命名路由'/':(context)=>Tabs(),  //命名路由传值 arguments工具是必须的'/form':(context)=>FormPage(),'/product':(context)=>ProductPage(),  //命名路由传值 arguments工具是必须的'/productInfoPage':(context,{arguments})=>ProductInfoPage(arguments:arguments),  //命名路由传值 arguments工具是必须的'/search':(context,{arguments})=>SearchPage(arguments:arguments),  //命名路由传值 arguments工具是必须的'/login':(context)=>LoginPage(),'/registerFirst':(context)=>RegisterFirstPage(),'/registerSecond':(context)=>RegisterSecondPage(),'/registerThird':(context)=>RegisterThirdPage()
};//固定写法
var oonGenerateRoute=(RouteSettings settings) {// 统一处理final String name = settings.name;    //得到命名路由的名字,例如:'/form'final Function pageContentBuilder = routes[name];  //得到命名路由的键去获取值,例如:(context)=>FormPage(),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;}}
};

Futter基础第10篇: 实现替换路由、返回到根路由相关推荐

  1. Futter基础第3篇: 实现引用远程图片、本地图片、实现圆形图片,实现圆角图片【Image.network、Image.asset、BorderRadius.circular(150)】

    文章目录 一丶 效果图 二丶 代码+注释 三丶 知识点 一丶 效果图 [1]引用远程图片 [2]引用本地图片 [3]实现圆形图片(方法一).圆角图片(受弧度影响) [4]实现圆形图片(方法二) 二丶 ...

  2. wpf 开源框架_.NET Core跨平台基础框架:10 篇热文汇总

    (给DotNet加星标,提升.Net技能) 本文精选了DotNet 2019年12月份的10篇热门文章.其中有技术分享.技术资源. 注:以下文章,点击标题即可阅读 <C#异步编程 > Ta ...

  3. vue.js路由配置vue-router的基础学习 - 概念篇

    文章目录 引言 · 相关问题小结: 一.动态路由匹配 (两种情况) A. 两种情况,代码对比: B. 两种情况,效果图对比: C. 提醒 · 仔细体会: D. 优先级的问题: 二.嵌套路由 引言 · ...

  4. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第10篇]RSA和强RSA问题有什么区别

    这个密码学52件事数学知识的第一篇,也是整个系列的第10篇.这篇介绍了RSA问题和Strong-RSA问题,指出了这两种问题的不同之处. 密码学严重依赖于这样的假设,某些数学问题难以在有限的时间内解决 ...

  5. vue2+vue3小白零基础教程—vue2篇,全网2021最详细教程

    vue教程 提示:Vue3系列请参考Vue2+Vue3小白零基础教程-vue3篇文章,本文为vue2篇. 1. Vue核心 1.1 Vue简介 1.1.1 Vue是什么 一套用于构建用户界面的渐进式J ...

  6. JavaScript 基础知识 - DOM篇(二)

    7. 节点操作 7.1 节点的属性 节点分类: 标签节点 文本节点 属性节点 注释节点 节点常用的属性: nodeType:节点的类型 nodeName:节点名称 nodeValue:节点值 常见的节 ...

  7. 暑假计算机培训心得体会,暑期培训心得体会模板集锦10篇

    暑期培训心得体会模板集锦10篇 我们得到了一些心得体会以后,可用写心得体会的方式将其记录下来,这样有利于我们不断提升自我.那么写心得体会要注意的内容有什么呢?下面是小编整理的暑期培训心得体会10篇,欢 ...

  8. JavaScript 基础知识 - 入门篇(二)

    11. 函数 11.1 函数的基础知识 为什么会有函数? 在写代码的时候,有一些常用的代码需要书写很多次,如果直接复制粘贴的话,会造成大量的代码冗余: 函数可以封装一段重复的javascript代码, ...

  9. vue2进阶篇:vue-router之“使用独享路由守卫”

    文章目录 10.13路由守卫 案例:将案例改为"使用独享路由守卫" 完整代码 本人其他相关文章链接 10.13路由守卫 注意点1: 前置路由守卫或者后置路由守卫中,to指代切换到哪 ...

  10. web前端类毕业论文文献(推荐10篇)

    本文是为大家整理的web前端主题相关的10篇毕业论文文献,包括5篇期刊论文和5篇学位论文,为web前端概论选题相关人员撰写毕业论文提供参考. 1.[期刊论文]Web前端开发技术以及优化策略分析 期刊: ...

最新文章

  1. 从Nginx源码谈大小写字符转化的最高效代码以及ASCII码表的科学
  2. java ADT生成带签名的apk
  3. Android OkHttp的使用心得
  4. 如何在jupyter notebook中运行markdown文件(脚本、代码)
  5. yunyang1994 tensorflow_yolov3 对于检测中心点的边缘物体时评估IOU对召回率和精度的影响
  6. JavaScript中的对象与函数(一)
  7. webpack --- [4.x]你能看懂的webpack项目初始化
  8. 中设置colorbar_【值得收藏】如何画出学术论文中需要的各种精美插图,看这一篇就够了!...
  9. linux 下载mysql5.7.22
  10. ai推理_人工智能推理能力问答
  11. JavaBeginnersTutorial 中文系列教程·翻译完成
  12. 17. Gradle编译其他应用代码流程(五) - 设置Task过程
  13. 计算机网络学习笔记(12. 计算机网络体系结构概述)
  14. 使用PostgreSQL进行中文全文检索
  15. python扫描字符串文本时下线_SyntaxError:扫描字符串文本Python calcun时的EOL
  16. TCP协议最大字节数计算
  17. 耄耋的三星,蹒跚的步履
  18. 顶峰Android手机视频转换器,顶峰FLV视频转换器
  19. matlab RFID解码,UHF RFID编码之TPP编码
  20. 12306抢票工具的使用

热门文章

  1. node-amqp 使用fanout发布订阅rabbitmq消息
  2. 【Mysql】之基础sql语句模板
  3. 03_java基础(四)之方法的创建与调用
  4. 黑板课爬虫闯关之关卡二
  5. 双重释放漏洞(来自漏洞战争一书)
  6. Spring IoC — 基于Java类的配置
  7. 图解自监督学习,从入门到专家必读的九篇论文
  8. 拿到参考资料的预训练模型,太可怕了!
  9. 知深行远:关于图神经网络层数加深的探索
  10. 数据预处理—4.为什么要趋近于正态分布?详解