generator method
Generates the RouteFactory which builds a Route on request.
These routes are built using the NyRouterRoutes addRoute method.
Implementation
RouteFactory generator({
Widget Function(BuildContext context, Widget widget)? builder,
}) {
return (RouteSettings settings) {
if (settings.name == null) return null;
final parsed = _parseRouteSettings(settings);
final String routeName = parsed.routeName;
final ArgumentsWrapper argumentsWrapper = parsed.arguments;
final NyArgument? baseArgs = argumentsWrapper.baseArguments;
final NyQueryParameters? queryParameters =
argumentsWrapper.queryParameters;
late final NyRouterRoute? route;
if (routeName == "/") {
route = _routeNameMappings[routeName];
} else {
if (_routeNameMappings.containsKey(routeName)) {
route = _routeNameMappings[routeName];
} else {
if (_routeUnknownMappings.isNotEmpty) {
route = _routeUnknownMappings.entries.first.value;
}
}
}
if (route == null) return null;
route.pageTransitionSettings ??= const PageTransitionSettings();
if (Nylo.instance.onDeepLinkAction != null) {
Nylo.instance.onDeepLinkAction!(route.name, queryParameters?.data);
}
PageTransitionType? pageTransitionType;
if (route.pageTransitionType != null) {
pageTransitionType = route.pageTransitionType;
}
if (route.getTransitionType != null) {
pageTransitionType = route.getTransitionType?.pageTransitionType;
}
if (argumentsWrapper.pageTransitionType != null) {
pageTransitionType = argumentsWrapper.pageTransitionType;
}
return PageTransition(
child: StatefulBuilder(
builder: (BuildContext context, StateSetter setState) {
if (builder != null) {
Widget widget = route!.builder(
context,
baseArgs ?? route.defaultArgs,
queryParameters ?? route.queryParameters,
);
return builder(context, widget);
}
return route!.builder(
context,
baseArgs ?? route.defaultArgs,
queryParameters ?? route.queryParameters,
);
},
),
type: pageTransitionType ?? PageTransitionType.rightToLeft,
settings: settings,
duration: _getPageTransitionDuration(route, argumentsWrapper),
alignment: _getPageTransitionAlignment(route, argumentsWrapper),
reverseDuration: _getPageTransitionReversedDuration(
route,
argumentsWrapper,
),
childCurrent: _getPageTransitionChildCurrent(route, argumentsWrapper),
curve: _getPageTransitionCurve(route, argumentsWrapper),
ctx: _getPageTransitionContext(route, argumentsWrapper),
inheritTheme: _getPageTransitionInheritTheme(route, argumentsWrapper),
fullscreenDialog: _getPageTransitionFullscreenDialog(
route,
argumentsWrapper,
),
opaque: _getPageTransitionOpaque(route, argumentsWrapper),
);
};
}