← ClaudeAtlas

auto-routelisted

GM Auto Route patterns — modular (RouteProvider + per-feature router) vs non-modular (single AppRouter)
ghozimahdi/gm-aiagent-plugins · ★ 0 · API & Backend · score 67
Install: claude install-skill ghozimahdi/gm-aiagent-plugins
Resolve `UFIL_ROOT` to the plugin root containing this skill. Claude Code may provide `CLAUDE_PLUGIN_ROOT`; Codex can resolve it from the installed skill path. ## Auto Route Patterns (GM Standard) ### Non-Modular — Single AppRouter ```dart // lib/app_router.dart @AutoRouterConfig(replaceInRouteName: 'Page,Route') class AppRouter extends RootStackRouter { @override List<AutoRoute> get routes { return [ AutoRoute(page: SplashRoute.page, initial: true), AutoRoute(page: LoginRoute.page), AutoRoute(page: RegisterRoute.page), AutoRoute( page: MainRoute.page, children: [ AutoRoute(page: DashboardRoute.page), AutoRoute(page: PropertyListRoute.page), AutoRoute(page: TenantListRoute.page), AutoRoute(page: SettingsRoute.page), ], ), AutoRoute(page: PropertyDetailRoute.page), AutoRoute(page: AddPropertyRoute.page), ]; } } ``` Every page uses `@RoutePage()`: ```dart @RoutePage() class PropertyDetailPage extends StatelessWidget { const PropertyDetailPage({ super.key, required this.propertyId, }); final String propertyId; @override Widget build(BuildContext context) { return BlocProvider( create: (_) => getIt<PropertyDetailBloc>() ..add(PropertyDetailEvent.started(propertyId: propertyId)), child: const _PropertyDetailView(), ); } } ``` Navigation: ```dart // Push context.router.push(PropertyDetailRoute(propertyId: '123