pushNamed<T extends Object?> method

  1. @optionalTypeArgs
Future<T?> pushNamed<T extends Object?>(
  1. String name, {
  2. Object? arguments,
})

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