在原生开发中,安卓和IOS自有控制页面(Activity、ViewControl)跳转的功能,在flutter中,路由管理变得更加统一灵活高效。
路由管理需求
在Flutter中,万物皆组件,页面也是组件,路由则是组件之间的跳转、传值,常见的需求有下面四种:
- 跳转下一页
- 返回上一页
- 正向传值
- 反向传值
我们主要研究这四种操作的方式,在每个项目中都必备的需求。
MaterialApp 内置的路由管理
在 MaterialApp 中内置的路由管理,有两种操作方式:
- 未声明路由,使用实例化组件直接跳转
- 声明路由,使用路由的名称进行跳转
两种方式各有优劣,项目中酌情选择,第一种方式更灵活,简单除暴,但无法统一管理,比较松散,第二种可以统一管理,使用路由name进行对应操作,但是传值、取值可能较麻烦。
前面说了,flutter中的页面也是组件,所以我们首先用Scaffold脚手架创建两个独立的页面: HomePage
和 NextPage
。用这两个页面来实现后续的所有需求:
不声明路由
1. 跳转下一页
无需声明组件,直接使用api跳转到回调中的组件页面:
// HomePage 页面
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Home Page"),
),
body: Center(
child: RaisedButton(
onPressed: () {
Navigator.push(context, MaterialPageRoute(builder: (ctx) => NextPage()));
},
child: Text("跳转到第二页"),
),
),
);
}
}
// NextPage 页面
class NextPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Next Page"),
),
body: Container(
child: Text("Next Page"),
),
);
}
}
直接使用api,就可以进行快速的页面跳转,其中关键跳转代码
...
Navigator.push