makeRouteFactory<T> function

RouteFactory makeRouteFactory<T>({
  1. required PageBuilder pageRouteBuilder,
  2. required RootSegment<Widget> routeTree,
  3. required Widget createAnonymousRoute(),
})

Creates a RouteFactory to pass to WidgetsApp.onGenerateRoute.

The routeTree defines which path should be mapped to which Widget.

pageRouteBuilder is used to transform a Widget into a PageRoute.

createAnonymousRoute only gets called when RouteSettings.name is null, which is to say that the route is anonymous. When aiming to consistently use named routes this can usually be the same as the widget returned by your RootSegment.createError.

For example a trivial usage of this function may look like this:

Widget build(BuildContext context) => MaterialApp(
  ...
  initialRoute: "/",
  onGenerateRoute: makeRouteFactory<dynamic>(
    transform: (widget, settings) => MaterialPageRoute<dynamic>(
      builder: (context) => widget,
      settings: settings,
    ),
    createAnonymousRoute: () => const NoScreenFoundScreen(uri: null),
    routeTree: Segment.root<Widget>(
      create: (context) => const HomeScreen(),
      createError: (context) => NoScreenFoundScreen(uri: context.uri),
      children: [
        ...
      ],
    ),
  ),
...
);

Implementation

RouteFactory makeRouteFactory<T>({
  required PageBuilder pageRouteBuilder,
  required RootSegment<Widget> routeTree,
  required Widget Function() createAnonymousRoute,
}) =>
    (RouteSettings settings) {
      final name = settings.name;
      return name != null
          ? pageRouteBuilder(routeTree.routeRaw(name), settings)
          : pageRouteBuilder(createAnonymousRoute(), settings);
    };