动态导航路线

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}