generator method

RouteFactory generator({
  1. Widget builder(
    1. BuildContext context,
    2. Widget widget
    )?,
})

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