generator method

RouteFactory generator({
  1. VoyagerRouteType routeType = VoyagerRouteType.material,
})

method's output should be passed to MaterialApp.onGenerateRoute or CupertinoApp.onGenerateRoute

Implementation

RouteFactory generator(
    {VoyagerRouteType routeType = VoyagerRouteType.material}) {
  return (RouteSettings settings) {
    final path = settings.name!;
    final builder = (BuildContext context) {
      var isWrappedWithRouter = false;

      // If App is not wrapped with RouterProvider we use
      // the current instance. this breaks hot reload until page
      // is off the stack as PageRoute will hold old router
      // reference
      try {
        isWrappedWithRouter =
            Provider.of<VoyagerRouter?>(context, listen: false) != null;
      } catch (_) {}

      dynamic argument;
      if (settings.arguments != null) {
        if (settings.arguments is VoyagerArgument) {
          argument = settings.arguments;
        } else {
          argument = VoyagerArgument(settings.arguments);
        }
      }

      return VoyagerWidget(
          path: path,
          router: isWrappedWithRouter ? null : this,
          argument: argument);
    };

    switch (routeType) {
      case VoyagerRouteType.material:
        return MaterialPageRoute<dynamic>(
            builder: builder, settings: settings);
      case VoyagerRouteType.cupertino:
        return CupertinoPageRoute<dynamic>(
            builder: builder, settings: settings);
    }
  };
}