路由:核心是 路由映射表
. 如:名字detail
映射到 DetailPage
页面等
在Flutter中,路由管理主要有两个类:Route和Navigator.
Route
一个页面要想被路由统一管理,必须包装为一个Route
Navigator
管理所有的Route的Widget,通过一个Stack来进行管理.
MaterialApp、CupertinoApp、WidgetsApp它们默认是有插入Navigator的,在需要的时候,只需要直接使用即可. Navigator.of(context)
Navigator常用方法:
// 路由跳转:传入一个路由对象
Future<T> push<T extendsObject>(Route<T> route)
// 路由跳转:传入一个名称(命名路由)
Future<T> pushNamed<T extendsObject>(
String routeName, {
Object arguments,
})
// 路由返回:可以传入一个参数
bool pop<T extendsObject>([ T result ])
命名路由
- 命名路由是将名字和路由的映射关系,在一个地方进行统一的管理
- 有了命名路由,就可以通过
Navigator.pushNamed()
方法来跳转到新的页面
命名路由的位置
放在MaterialApp的 initialRoute 和 routes 中
initialRoute
:设置应用程序从哪一个路由开始启动,设置了该属性,就不需要再设置home属性了routes
:定义名称和路由之间的映射关系,类型为Map<String, WidgetBuilder>
onGenerateRoute
: 通过pushNamed进行跳转,但是对应的name没有在routes中有映射关系,那么就会执行onGenerateRoute
钩子函数 . 另外,onGenerateRoute
也可以作为页面跳转的权限控制.;onUnknownRoute
: 如果打