initRouter method

  1. @override
void initRouter({
  1. String? initialLocation,
  2. required List<RouteBase> routes,
  3. required GlobalKey<NavigatorState> rootNavigatorKey,
})
override

Implementation

@override
void initRouter({
  String? initialLocation,
  required List<g.RouteBase> routes,
  required GlobalKey<NavigatorState> rootNavigatorKey,
}) {
  if (_initialized) {
    throw StateError('Router already initialized');
  }

  final allRoutes = _finalizeRoutes([...routes, ..._initialRoutes]);
  _routingConfig = RoutingConfigNotifier(
    allRoutes,
    redirect: _composedRedirect,
  );

  final observers = vyuh.plugins
      .whereType<RouteObservers>()
      .expand((p) => p.observers)
      .toList();

  _router.dispose();
  _router = GoRouter.routingConfig(
    initialLocation: initialLocation ?? '/',
    routingConfig: _routingConfig,
    navigatorKey: rootNavigatorKey,
    debugLogDiagnostics: kDebugMode,
    observers: observers,
    errorBuilder: (context, state) => RouteFailureView(
      failure: VyuhFailure(
        kind: FailureKind.notFound,
        title: VyuhStrings.current.pageNotFoundTitle,
        message: VyuhStrings.current.noRouteMessage(state.uri),
        error: state.error,
        location: state.uri,
      ),
      // Re-run matching and redirects for the current location only.
      onRetry: () => _router.refresh(),
    ),
  );

  _stopWatchingRedirects?.call();
  _stopWatchingRedirects = watchRedirectTriggers(() => _router.refresh());

  _initialized = true;
}