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,
    onEnter: onEnter,
    redirectLimit: redirectLimit,
  );

  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,
    refreshListenable: refreshListenable,
    onException: onException,
    errorPageBuilder: onException == null ? errorPageBuilder : null,
    extraCodec: extraCodec,
    restorationScopeId: restorationScopeId,
    requestFocus: requestFocus,
    routerNeglect: routerNeglect,
    overridePlatformDefaultLocation: overridePlatformDefaultLocation,
    errorBuilder: onException != null || errorPageBuilder != null
        ? null
        : errorBuilder ?? _buildError,
  );

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

  _initialized = true;
}