generateRouteFactory function

RouteFactory generateRouteFactory(
  1. Iterable<StaticRoute> routes
)

生成静态路由工厂

构建根MaterialApp时需要在MaterialApp.onGenerateRoute上绑定此方法后静态路由表才能生效


final routeTable = <StaticRoute>[
 ExamplePage.route,
 ...
];

MaterialApp(
 onGenerateRoute: generateRouteFactory(routeTable),
);

Implementation

RouteFactory generateRouteFactory(Iterable<StaticRoute> routes) {
  String? getName(String? name) {
    if (name != null && name.startsWith('/') && name.length > 1) {
      return name.substring(1);
    }

    return name;
  }

  final table = {for (var route in routes) getName(route.name): route};

  return (settings) {
    final staticRoute = table[getName(settings.name)];
    if (staticRoute == null) {
      return null;
    }

    final route = staticRoute.builder(settings);

    if (route != null && staticRoute.onExit != null) {
      route.popped.then((value) {
        staticRoute.onExit
            ?.call(route.navigator!.context, settings.arguments, value);
      });
    }

    return route;
  };
}