Route 和 Navigator 用于页面之间的跳转

一 Navigator 的 push 和 pop 用于页面之间的跳转

创建MaterialApp时可以指定routes参数,该参数是一个映射路由名称和构造器的Map

跳转的时候 使用 push

跳回的时候使用 pop

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';void main() => runApp(MyApp());class MyApp extends StatelessWidget {// This widget is the root of your application.@overrideWidget build(BuildContext context) {return MaterialApp(theme: ThemeData(primarySwatch: Colors.blue,),home: FirstPage(),routes: <String ,WidgetBuilder>{'/first':(BuildContext context) =>FirstPage(),'/second':(BuildContext context) =>SecondPage()},);}
}// 第一个页面
class FirstPage extends StatelessWidget
{@overrideWidget build(BuildContext context) {return new Scaffold(appBar:new AppBar(title:new Text( "第一个页面")),body:new Center(child:new RaisedButton(child: new Text("点击打开第二个页面"),onPressed: (){Navigator.of(context).pushNamed('/second');},      ),),);}}class SecondPage extends StatelessWidget
{@overrideWidget build(BuildContext context) {return new Scaffold(appBar:new AppBar(title:new Text( "第二个页面")),body:new Center(child:new RaisedButton(child: new Text("点击返回"),onPressed: (){Navigator.of(context).pop();},      ),),);}}

二 第二种方式

直接使用MaterialPageRoute创建路由,它是一种模态路由,可以通过平台自适应的过渡效果来切换屏幕。默认情况下,当一个模态路由被另一个替换时,上一个路由将保留在内存中,如果想释放所有资源

onPressed: (){Navigator.push(context, new MaterialPageRoute(builder: (context) => SecondPage()));
},

三 示例操作 参数回调

第一个页面点击进去 第二个页面 点击喜欢与否 回传结果

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';void main() => runApp(MyApp());class MyApp extends StatelessWidget {// This widget is the root of your application.@overrideWidget build(BuildContext context) {return MaterialApp(theme: ThemeData(primarySwatch: Colors.blue,),home: NewTableList(),);}
}class ContentPage extends StatelessWidget
{final HotNews news;ContentPage(this.news);@overrideWidget build(BuildContext context) {return new Scaffold(appBar:new AppBar(title:new Text(news.title)),body:new Padding( padding: new EdgeInsets.all(25),child: new Column(children: <Widget>[new Text(news.content),new Row(mainAxisAlignment: MainAxisAlignment.spaceAround,children: <Widget>[new RaisedButton(onPressed: (){// 点击的时候 回调用户的选择结果Navigator.pop(context,'Good');},child: new Text("不错"),                      ),new RaisedButton(onPressed: (){// 点击的时候 回调用户的选择结果Navigator.pop(context,'Bad');                       },child:new Text("差劲"),                      )],)],),),);}
}// 创建一个新闻的类
class HotNews{String title;String content;HotNews({this.title,this.content});}// 创建列表
class NewTableList extends StatelessWidget
{final List<HotNews> arrs = new List.generate(20, (idx) => new HotNews(title:'这是第 $idx 标题',content: '这是第 $idx 部分的正文',)); @override Widget build(BuildContext context) {return new Scaffold(appBar: AppBar(title: Text("热点资讯")),body: new ListView.builder(itemCount: arrs.length,itemBuilder: (context,idx){return new ListTile(title: new Text(arrs[idx].title),// 添加一个点击事件onTap: () async {// 创建一个结果 结束用户的点击  String readRes = await Navigator.push(context ,new MaterialPageRoute(builder: (context) => new ContentPage(arrs[idx])));// 显示回传的结果内容if (readRes != null){Scaffold.of(context).showSnackBar(new SnackBar(content: new Text("$readRes"),duration: const Duration(seconds: 2),));}},                  );},),         );}}

7-flutter Navigator 和Route相关推荐

  1. flutter 局部状态和全局状态区别_给 Android 开发者的 Flutter 指南

    这篇文档旨在帮助 Android 开发者利用既有的 Android 知识来通过 Flutter 开发移动应用.如果你了解 Android 框架的基本知识,你就可以使用这篇文档作为 Flutter 开发 ...

  2. Flutter系列-flutter路由管理

    Flutter路由管理 初识路由概念 一.路由管理 1.1.Route 1.2.MaterialPageRoute 1.3.Navigator 1.4.路由传值 1.5 命名路由 1.6.命名路由参数 ...

  3. 【Flutter】应用开发笔记

    1 获取Flutter SDK 1.下载安装包 2.将压缩包解压,然后把其中的 flutter 目录整个放在你想放置 Flutter SDK 的路径中 勿将 Flutter 安装在需要高权限的文件夹内 ...

  4. java hasfocus_说说Flutter中的无名英雄 —— Focus

    Focus系列的Widget及功能类在Flutter中可以说是无名英雄的存在,默默的付出但却不太为人所知.在日常开发使用中也不太会用到它,这是为什么呢?带着这个问题我们开始今天的内容. 1.Focus ...

  5. Flutter 布局 - UI - 官方文档 - 学习速记(一)

    设置crossAxisAlignment属性值为CrossAxisAlignment.start,这会将该列中的子项左对齐. 获取主题色:Theme.of(context).primaryColor; ...

  6. Flutter 无埋点SDK实现

    前言 先看下各个平台自动化埋点支持 平台 特点 自动化埋点方案 Android Java支持编译器静态代理/运行期动态代理 有成熟方案和产品,例如GrowingIO.神策.友盟 iOS OC提供了强大 ...

  7. flutter 局部状态和全局状态区别_Android 开发者遇到 5G、AI,写给 Android 开发者的 Flutter 指南

    ​前言 Flutter 是 Google 用以帮助开发者在 iOS 和 Android 两个平台开发高质量原生 UI 的移动 SDK.Flutter 兼容现有的代码,免费并且开源,在全球开发者中广泛被 ...

  8. Flutter路由守卫拦截

    路由守卫拦截最常见的应用场景就是对用户数据权限的校验(用户是否是登录状态,404页面跳转--). 在Flutter中可以通过MaterialAppWedgit中的onGenerateRoute属性实现 ...

  9. 给 Android 开发者的 Flutter 指南(上)

    这篇文档旨在帮助 Android 开发者通过 Flutter 开发移动应用.如果你了解 Android 框架的基本知识,你就可以使用这篇文档作为 Flutter 开发的快速入门. 你的 Android ...

最新文章

  1. ADPRL - 近似动态规划和强化学习 - Note 4 - Policy Iteration Algorithms
  2. 33 ES6中的类和对象
  3. 大多数比特币 混币交易属合法交易
  4. python小程序-【Python精华】100个Python练手小程序
  5. iOS中代码支持多国语言切换的实现(Xcode5+iOS7)
  6. Tomcat 之 Session的活化和钝化 源码分析
  7. python如何安装扩展库openpyxl和numpy_Python第三方库之openpyxl(2)
  8. spring boot+mybatis+generator生成domain大小写问题
  9. 给数据库减负的八个思路
  10. 【干货】2020年研发运营安全白皮书.pdf(附下载链接)
  11. cnpm安装webpack_【6000字】从0到1,配置webpack
  12. 模糊pid控制算法matlab程序解读,基于Matlab的模糊PID控制研究
  13. Android9.0 PM机制系列(二)PackageInstaller安装APK
  14. android 炫飞 打印机,手机拍照打印机推荐 佳能炫飞CP1200打印机介绍【详解】
  15. 硬件基础知识-二极管基础
  16. 薪酬管理系统功能描述文档
  17. wireshark 找不到wifi无线网卡的解决方法
  18. Mybatis 报错Mapper method ‘xxx‘ has an unsupported return type,解决办法
  19. 无状态,无连接的理解
  20. 谈谈字符集和字符编码

热门文章

  1. RedHat 7.0及CentOS 7.0禁止Ping的三种方法
  2. 发现一个浏览器很奇怪的问题
  3. 人脸检测流程及正负样本下载
  4. php 学习笔记 数组1
  5. 2014.12.01 B/S之windows8.1下安装IIS
  6. 批量修改图片以及加水印
  7. 13个JavaScript图表图形绘制插件
  8. 利用外部命令Oralce数据库导入导出
  9. 一个开发团队、软件公司,团队工作氛围很重要,没有好氛围难出好产品、好项目...
  10. C#的方法的参数修饰符详解