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