pushNamed<T extends Object?> method
TODO: Return T from page route
Pushes page with given name to top of navigator page stack and inflates it.
Implementation
@optionalTypeArgs
Future<T?> pushNamed<T extends Object?>(String name,
{Object? arguments}) async {
Page? page;
if (pages.containsKey(name)) {
page = pages[name]!(arguments);
} else {
// generate page with callback
assert(() {
if (onGeneratePage == null) {
throw FlutterError.fromParts(<DiagnosticsNode>[
ErrorSummary(
'AdvancedNavigator.onGeneratePage was null but the referenced page had no corresponding page in the app.'),
ErrorDescription('The referenced page was: "$name" '
'To use the AdvancedNavigator API with named pages (pushNamed), '
'the AdvancedNavigator must be provided with either a matching reference '
'in the pages map or an onGeneratePage handler.\n'),
DiagnosticsProperty<String>('The AdvancedNavigator tag was', tag,
style: DiagnosticsTreeStyle.errorProperty),
DiagnosticsProperty<RouterDelegate>('The RouterDelegate was', this,
style: DiagnosticsTreeStyle.errorProperty),
]);
}
return true;
}());
var routeSettings = RouteSettings(name: name, arguments: arguments);
page = onGeneratePage!.call(routeSettings);
if (page == null) {
assert(() {
if (onUnknownPage == null) {
throw FlutterError.fromParts(<DiagnosticsNode>[
ErrorSummary(
'AdvancedNavigator.onGeneratePage returned null when requested to build page "$name".'),
ErrorDescription(
'The onGeneratePage callback must never return null, unless an onUnknownPage '
'callback is provided as well.'),
DiagnosticsProperty<String>('The AdvancedNavigator tag was', tag,
style: DiagnosticsTreeStyle.errorProperty),
DiagnosticsProperty<RouterDelegate>(
'The RouterDelegate was', this,
style: DiagnosticsTreeStyle.errorProperty),
]);
}
return true;
}());
page = onUnknownPage!.call(routeSettings);
assert(() {
if (page == null) {
throw FlutterError.fromParts(<DiagnosticsNode>[
ErrorSummary(
'Navigator.onUnknownPage returned null when requested to build page "$name".'),
ErrorDescription(
'The onUnknownPage callback must never return null.'),
DiagnosticsProperty<String>('The AdvancedNavigator tag was', tag,
style: DiagnosticsTreeStyle.errorProperty),
DiagnosticsProperty<RouterDelegate>(
'The RouterDelegate was', this,
style: DiagnosticsTreeStyle.errorProperty),
]);
}
return true;
}());
}
}
_pages = List.unmodifiable(<Page>[..._pages, page!]);
notifyListeners();
return null;
}