动态导航路线
Dynamic navigation routes
我有一个应用程序,我想尝试重新制作它。在这个应用中,导航路线变化很大,并没有在一个集中的地方定义,而是由不同的开发者在不同的"micro-projects"中定义,然后在主应用中绑定在一起。
所以我的问题是:我可以在运行时以某种方式在 MaterialApp 上动态设置路由吗?因此,当加载给定的小部件 class 时,它会获取 MaterialApp 实例并在 MaterialApp 上设置一个新的路由映射,之前的所有路由现在都消失并被新路由取代?
MaterialApp
上有一个 属性 来处理动态路由:onGenerateRoute
例如,如果您这样做
onGenerateRoute: (routeSettings) {
if (condition) {
return new MaterialPageRoute(
builder: (context) => new MyPage(),
settings: routeSettings,
);
}
// fallback route here
},
这将处理 所有 路由,即使它们不是静态定义的,只要它们匹配 condition
但请记住,Flutter 禁止使用 dart:mirror
。这意味着如果你想进一步推动事情,你必须使用代码生成器。结合装饰器,你可以在任何时候写:
class MyWidget extends StatelessWidget {
final int prop;
@MyNavigation
MyWidget({this.prop});
@override
Widget build(BuildContext context) {
return new Container();
}
}
它会自动生成处理路由的代码/mywidget/{prop}
。
我有一个应用程序,我想尝试重新制作它。在这个应用中,导航路线变化很大,并没有在一个集中的地方定义,而是由不同的开发者在不同的"micro-projects"中定义,然后在主应用中绑定在一起。
所以我的问题是:我可以在运行时以某种方式在 MaterialApp 上动态设置路由吗?因此,当加载给定的小部件 class 时,它会获取 MaterialApp 实例并在 MaterialApp 上设置一个新的路由映射,之前的所有路由现在都消失并被新路由取代?
MaterialApp
上有一个 属性 来处理动态路由:onGenerateRoute
例如,如果您这样做
onGenerateRoute: (routeSettings) {
if (condition) {
return new MaterialPageRoute(
builder: (context) => new MyPage(),
settings: routeSettings,
);
}
// fallback route here
},
这将处理 所有 路由,即使它们不是静态定义的,只要它们匹配 condition
但请记住,Flutter 禁止使用 dart:mirror
。这意味着如果你想进一步推动事情,你必须使用代码生成器。结合装饰器,你可以在任何时候写:
class MyWidget extends StatelessWidget {
final int prop;
@MyNavigation
MyWidget({this.prop});
@override
Widget build(BuildContext context) {
return new Container();
}
}
它会自动生成处理路由的代码/mywidget/{prop}
。