initRouter method
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;
}