generateRouteFactory function
生成静态路由工厂
构建根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;
};
}