Flutter的页面管理 路由与导航

什么是Flutter的路由与导航,如何完成不同页面跳转?,如何获取路由跳转的返回值?
要在Flutter中切换屏幕,我们可以访问路由以绘制新的Widget,管理多个屏幕有两个核心概念和类:Route(路由) 和 Navigator(导航)。

Route(路由):

Route是应用程序的“屏幕”或“页面”的抽象(可以认为是Activity,也可以粗略地把一个路由对应到一个 UIViewController)。

Navigator(导航):

Navigator是管理Route的Widget。Navigator可以通过push和poproute以实现页面切换(Navigator的工作原理和 iOS 中 UINavigationController 非常相似,当你想跳转到新页面或者从新页面返回时,它可以 push() 和 pop() 路由。)。

路由根据声明的时机可以分为静态路由和动态路由。

静态路由

静态路由使用时要求我们在MaterialApp中的routes中提前注册路由,可以接收下一页面的返回数据。

//声明
routes: <String, WidgetBuilder>{
	'/a': (BuildContext context) => RouteHome(title: 'page A'),
	'/b': (BuildContext context) => RouteHome(title: 'page B'),
	'/c': (BuildContext context) => RouteHome(title: 'page C'),
},
//使用
Navigator.of(context).pushNamed('/b');


比如从A页面打开B页面

一级页面代码:
RaisedButton(
  child: Text('Route'),
  onPressed: () {
	Navigator.of(context)
		.pushNamed('/b');
  },

二级页面代码:

floatingActionButton: new FloatingActionButton(
	onPressed: () {
	  Navigator.of(context).pop("StaticNavPage 返回值");
	},
	child: new Text("返回"),
  )

动态路由

动态路由不需要提前注册 ,但是需要,Navigator.push的时候传递一个MaterialPageRoute 对象。 可以向下一个页面传递参数,同样也可以接收新页面回传回来的数据。
一级页面代码:

RaisedButton(
	  child: Text('动态路由传参'),
	  onPressed: () {
		Navigator.push(
			context,
			MaterialPageRoute(
				builder: (context) => DynamicNavPage(
					username: 'zhangsan',
					password: '121'
					))).then((onValue) {//then  接收回传的数据
		  showDialog(
			  context: context,
			  child: new AlertDialog(
				content: new Text(onValue),
			  ));
		});
	  },
	),

二级页面代码:

new MaterialButton(
	  onPressed: () {
		Navigator.pop(context, " 回传的数据 aaa");
	  },
	  child: new Text("点我返回"),
	  color: Colors.lightGreen,
	),

完整的代码在这里,我学习Flutter过程中的一个Demo,会持续更新Demo的内容,对Flutter 有兴趣的朋友可以一起学习。
https://github.com/CodingForAndroid/flutter_new

欢迎爱学习的小伙伴加群一起进步:230274309
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值