buildDocuments function
Future<List<RouteDocument> >
buildDocuments(
- RouteMatches matches,
- Map<
Object, RouteLoadResult> loads, { - required AppContext app,
Builds document fragments for a fully loaded route branch.
Implementation
Future<List<RouteDocument>> buildDocuments(
RouteMatches matches,
Map<Object, RouteLoadResult> loads, {
required AppContext app,
}) async {
final entries = <_DocumentEntry>[];
for (final route in matches.routes) {
final load = loads[route.identity];
if (load == null) {
throw StateError('Missing loader result for route ${route.path}.');
}
if (load.isLoaded && !load.hasData) {
Error.throwWithStackTrace(load.error!, load.stackTrace!);
}
final values = matches.branch.values(route)!;
entries.add(
_DocumentEntry(
route: route,
params: values.params,
search: values.search,
data: load.isLoaded ? load.data : const NoData(),
),
);
}
final branch = DocumentBranch._(entries);
final documents = <RouteDocument>[];
for (final route in matches.routes) {
final binding = route.capability(_documentCapability);
final built = binding == null
? null
: await binding.build(
app,
route,
matches,
loads[route.identity]!.isLoaded
? loads[route.identity]!.data
: const NoData(),
branch,
);
final document = _withMetadata(route.metadata, built);
if (document != null) documents.add(document);
}
return List<RouteDocument>.unmodifiable(documents);
}