AppRouter constructor
AppRouter({
- required Iterable<
RouteNode> routes, - AppContext? app,
- Uri? initialLocation,
- WidgetBuilder? loading,
- WidgetBuilder? notFound,
- RouterErrorBuilder? error,
- RouterInitialState? initialState,
Creates a router from manually assembled or generated routes.
Implementation
factory AppRouter({
required Iterable<RouteNode> routes,
AppContext? app,
Uri? initialLocation,
WidgetBuilder? loading,
WidgetBuilder? notFound,
RouterErrorBuilder? error,
RouterInitialState? initialState,
}) {
final routeList = List<RouteNode>.of(routes, growable: false);
final localRouteIdentities = HashSet<Object>.identity();
void collectLocalRoutes(Iterable<RouteNode> nodes) {
for (final route in nodes) {
if (route is PageRoute || route is ShellRoute) {
localRouteIdentities.add(route.identity);
}
collectLocalRoutes(route.children);
}
}
late final Uri location;
if (initialLocation case final initial?) {
if (!initial.hasAbsolutePath) {
throw ArgumentError.value(
initial,
'initialLocation',
'Router locations must have an absolute path.',
);
}
location = initial;
} else if (initialState case final initial?) {
location = initial.location;
} else {
final platform = Uri.parse(
ui.PlatformDispatcher.instance.defaultRouteName,
);
location = platform.hasAbsolutePath ? platform : Uri(path: '/');
}
final context = app ?? AppContext.empty();
final provider = _RouteInformationProvider(location);
late final AppRouter router;
final delegate = _RouterDelegate(
matcher: RouteMatcher(routeList),
provider: provider,
router: () => router,
app: context,
loading: loading,
notFound: notFound,
error: error,
initialState: initialState,
);
collectLocalRoutes(routeList);
router = AppRouter._(
provider: provider,
delegate: delegate,
app: context,
ownsApp: app == null,
localRouteIdentities: localRouteIdentities,
);
return router;
}