generate<R, P extends RouteParams> method
RouteCreator<R, P>
generate<R, P extends RouteParams>(
- AppRoute<
R, P> appRoute, - TransitionType? transition,
- Duration? transitionDuration,
- 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";
}
};
}