route method
Creates the GoRoute
for this navigable widget
Implementation
@override
RouteBase route() {
late final List<NavTarget> navTargets;
if (hookName != null) {
// Get any navTarget anchors from the feature
// registry and merge them with the predefined
// navTargets from this class
navTargets = List.from(this.navTargets);
final navTargetAnchors =
app.FeatureRegistry.instance().getAnchors<NavTarget>(
hookName!,
);
navTargets.addAll(navTargetAnchors);
navTargets.sort((a, b) => a._order.compareTo(b._order));
} else {
navTargets = this.navTargets;
}
assert(
navTargets.length >= 2,
'At least two nav targets are required',
);
return StatefulShellRoute.indexedStack(
builder: (context, navState, navShell) {
final navTitleBar = buildNavTitleBar(context);
final navDests = navTargets
.map(
(navTarget) => navTarget._destBuilder(context),
)
.toList();
final statusBar = buildStatusBar(context);
return RootLayout<RootState>(
body: NavLayout(
navShell,
navDests,
titleBar: navTitleBar,
navProperties: navProperties,
buildNavTrailLeadingWidgetFn: buildNavTrailLeadingWidget,
buildNavTrailTrailingWidgetFn: buildNavTrailTrailingWidget,
buildNavDrawerHeaderWidgetFn: buildNavDrawerHeaderWidget,
statusBar: statusBar,
),
createRootState: () => RootState(),
hookName: postLoginBootstrapHook,
);
},
branches: navTargets.map((navTarget) {
if (routeName == navTarget._body.routeName) {
return StatefulShellBranch(
navigatorKey: _shellNavigatorKey,
routes: [
navTarget._body.route(),
],
);
} else {
return StatefulShellBranch(
routes: [
navTarget._body.route(),
],
);
}
}).toList(),
);
}