generate<R, P extends RouteParams> method

  1. @override
RouteCreator<R, P> generate<R, P extends RouteParams>(
  1. AppRoute<R, P> appRoute,
  2. TransitionType? transition,
  3. Duration? transitionDuration,
  4. RouteTransitionsBuilder? transitionsBuilder,
)
override

Implementation

@override
RouteCreator<R, P> generate<R, P extends RouteParams>(
  AppRoute<R, P> appRoute,
  TransitionType? transition,
  Duration? transitionDuration,
  RouteTransitionsBuilder? transitionsBuilder,
) {
  return (String? routeName, P? parameters) {
    if (appRoute is CompletableAppRoute<R, P>) {
      return CompletableRouteAdapter<R>((context) {
        return appRoute.handleAny(context, parameters,
            (context, route, params) {
          /// This block of code is passed down to the AppRoute, as a way to
          /// invoke a child route from the parent route's context
          final Route<dynamic> Function(String?, RouteParams) routeCreator =
              generateAny(route, TransitionType.native,
                  Duration(milliseconds: 300), null);
          final r = routeCreator(route.routeTitle(params), params);
          return Navigator.of(context).push(r);
        }).then((_) => _ as R);
      });
    } else if (appRoute is AppPageRoute<R, P>) {
      bool isNativeTransition = (transition == TransitionType.native ||
          transition == TransitionType.nativeModal);
      final routeSettings = PathRouteSettings.ofAppRoute(
        appRoute,
        routeParams: parameters,
      );

      if (isNativeTransition) {
        if (!kIsWeb && Platform.isIOS) {
          return CupertinoPageRoute<R>(
              settings: routeSettings,
              fullscreenDialog: transition == TransitionType.nativeModal,
              builder: (BuildContext context) {
                return appRoute.handleAny(context, parameters);
              });
        } else {
          return MaterialPageRoute<R>(
              settings: routeSettings,
              fullscreenDialog: transition == TransitionType.nativeModal,
              builder: (BuildContext context) {
                return appRoute.handleAny(context, parameters);
              });
        }
      } else if (transition == TransitionType.material ||
          transition == TransitionType.materialFullScreenDialog) {
        return MaterialPageRoute<R>(
            settings: routeSettings,
            fullscreenDialog:
                transition == TransitionType.materialFullScreenDialog,
            builder: (BuildContext context) {
              return appRoute.handleAny(context, parameters);
            });
      } else if (transition == TransitionType.cupertino ||
          transition == TransitionType.cupertinoFullScreenDialog) {
        return CupertinoPageRoute<R>(
            settings: routeSettings,
            fullscreenDialog:
                transition == TransitionType.cupertinoFullScreenDialog,
            builder: (BuildContext context) {
              return appRoute.handleAny(context, parameters);
            });
      } else {
        final routeTransitionsBuilder = transition == TransitionType.custom
            ? transitionsBuilder!
            : standardTransitionsBuilder(transition);

        return PageRouteBuilder<R>(
          settings: routeSettings,
          pageBuilder: (BuildContext context, Animation<double> animation,
              Animation<double> secondaryAnimation) {
            try {
              return appRoute.handleAny(context, parameters);
            } catch (e, stack) {
              _log.severe("Error creating page: $e", e, stack);
              return Text("Invalid");
            }
          },
          transitionDuration:
              transitionDuration ?? Duration(milliseconds: 300),
          transitionsBuilder: routeTransitionsBuilder,
        );
      }
    } else {
      throw "Invalid type";
    }
  };
}