dvGoRouter function

GoRouter dvGoRouter(
  1. List<RouteBase> routes, {
  2. String at = '/',
  3. List<RouteBase> existing = const <RouteBase>[],
  4. GoRouterRedirect? redirect,
  5. String? initialLocation,
  6. GoRouterWidgetBuilder? errorBuilder,
  7. List<NavigatorObserver>? observers,
  8. GlobalKey<NavigatorState>? navigatorKey,
  9. Listenable? refreshListenable,
  10. int redirectLimit = 5,
})

For go_router: one GoRouter with Dartvel's routes mounted at at beside the app's existing routes.

Dartvel's routes come first, so on a path both declare Dartvel's page wins (and dartvel routes reports the clash as DV-ADOPT-002). The app's redirect is asked about the app's own paths only; Dartvel's paths keep Dartvel's guards. DV.Navigation is attached to the router.

Implementation

GoRouter dvGoRouter(
  List<RouteBase> routes, {
  String at = '/',
  List<RouteBase> existing = const <RouteBase>[],
  GoRouterRedirect? redirect,
  String? initialLocation,
  GoRouterWidgetBuilder? errorBuilder,
  List<NavigatorObserver>? observers,
  GlobalKey<NavigatorState>? navigatorKey,
  Listenable? refreshListenable,
  int redirectLimit = 5,
}) {
  final List<RouteBase> mounted = dvMountRoutes(routes, at: at);
  final GoRouter router = GoRouter(
    routes: <RouteBase>[...mounted, ...existing],
    initialLocation: initialLocation,
    errorBuilder: errorBuilder,
    observers: observers,
    navigatorKey: navigatorKey,
    refreshListenable: refreshListenable,
    redirectLimit: redirectLimit,
    redirect: redirect == null
        ? null
        : (BuildContext context, GoRouterState state) {
            final bool ours =
                dvHostedLocation(state.uri.toString(), routes, at: at) != null;
            return ours ? null : redirect(context, state);
          },
  );
  DVNavigation.attach(router);
  return router;
}