$route<T extends GoRouteData> method Null safety

GoRoute $route<T extends GoRouteData>(
  1. {required String path,
  2. required T factory(
    1. GoRouterState
    ),
  3. List<GoRoute> routes = const <GoRoute>[]}
)

A helper function used by generated code.

Should not be used directly.

Implementation

static GoRoute $route<T extends GoRouteData>({
  required String path,
  required T Function(GoRouterState) factory,
  List<GoRoute> routes = const <GoRoute>[],
}) {
  T factoryImpl(GoRouterState state) {
    final Object? extra = state.extra;

    // If the "extra" value is of type `T` then we know it's the source
    // instance of `GoRouteData`, so it doesn't need to be recreated.
    if (extra is T) {
      return extra;
    }

    return (_stateObjectExpando[state] ??= factory(state)) as T;
  }

  Widget builder(BuildContext context, GoRouterState state) =>
      factoryImpl(state).build(context);

  Page<void> pageBuilder(BuildContext context, GoRouterState state) =>
      factoryImpl(state).buildPageWithState(context, state);

  FutureOr<String?> redirect(BuildContext context, GoRouterState state) =>
      factoryImpl(state).redirect();

  return GoRoute(
    path: path,
    builder: builder,
    pageBuilder: pageBuilder,
    redirect: redirect,
    routes: routes,
  );
}