7-flutter Navigator 和Route
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相关推荐
- flutter 局部状态和全局状态区别_给 Android 开发者的 Flutter 指南
这篇文档旨在帮助 Android 开发者利用既有的 Android 知识来通过 Flutter 开发移动应用.如果你了解 Android 框架的基本知识,你就可以使用这篇文档作为 Flutter 开发 ...
- Flutter系列-flutter路由管理
Flutter路由管理 初识路由概念 一.路由管理 1.1.Route 1.2.MaterialPageRoute 1.3.Navigator 1.4.路由传值 1.5 命名路由 1.6.命名路由参数 ...
- 【Flutter】应用开发笔记
1 获取Flutter SDK 1.下载安装包 2.将压缩包解压,然后把其中的 flutter 目录整个放在你想放置 Flutter SDK 的路径中 勿将 Flutter 安装在需要高权限的文件夹内 ...
- java hasfocus_说说Flutter中的无名英雄 —— Focus
Focus系列的Widget及功能类在Flutter中可以说是无名英雄的存在,默默的付出但却不太为人所知.在日常开发使用中也不太会用到它,这是为什么呢?带着这个问题我们开始今天的内容. 1.Focus ...
- Flutter 布局 - UI - 官方文档 - 学习速记(一)
设置crossAxisAlignment属性值为CrossAxisAlignment.start,这会将该列中的子项左对齐. 获取主题色:Theme.of(context).primaryColor; ...
- Flutter 无埋点SDK实现
前言 先看下各个平台自动化埋点支持 平台 特点 自动化埋点方案 Android Java支持编译器静态代理/运行期动态代理 有成熟方案和产品,例如GrowingIO.神策.友盟 iOS OC提供了强大 ...
- flutter 局部状态和全局状态区别_Android 开发者遇到 5G、AI,写给 Android 开发者的 Flutter 指南
前言 Flutter 是 Google 用以帮助开发者在 iOS 和 Android 两个平台开发高质量原生 UI 的移动 SDK.Flutter 兼容现有的代码,免费并且开源,在全球开发者中广泛被 ...
- Flutter路由守卫拦截
路由守卫拦截最常见的应用场景就是对用户数据权限的校验(用户是否是登录状态,404页面跳转--). 在Flutter中可以通过MaterialAppWedgit中的onGenerateRoute属性实现 ...
- 给 Android 开发者的 Flutter 指南(上)
这篇文档旨在帮助 Android 开发者通过 Flutter 开发移动应用.如果你了解 Android 框架的基本知识,你就可以使用这篇文档作为 Flutter 开发的快速入门. 你的 Android ...
最新文章
- ADPRL - 近似动态规划和强化学习 - Note 4 - Policy Iteration Algorithms
- 33 ES6中的类和对象
- 大多数比特币 混币交易属合法交易
- python小程序-【Python精华】100个Python练手小程序
- iOS中代码支持多国语言切换的实现(Xcode5+iOS7)
- Tomcat 之 Session的活化和钝化 源码分析
- python如何安装扩展库openpyxl和numpy_Python第三方库之openpyxl(2)
- spring boot+mybatis+generator生成domain大小写问题
- 给数据库减负的八个思路
- 【干货】2020年研发运营安全白皮书.pdf(附下载链接)
- cnpm安装webpack_【6000字】从0到1,配置webpack
- 模糊pid控制算法matlab程序解读,基于Matlab的模糊PID控制研究
- Android9.0 PM机制系列(二)PackageInstaller安装APK
- android 炫飞 打印机,手机拍照打印机推荐 佳能炫飞CP1200打印机介绍【详解】
- 硬件基础知识-二极管基础
- 薪酬管理系统功能描述文档
- wireshark 找不到wifi无线网卡的解决方法
- Mybatis 报错Mapper method ‘xxx‘ has an unsupported return type,解决办法
- 无状态,无连接的理解
- 谈谈字符集和字符编码