addRouteToRouter function

Future<void> addRouteToRouter(
  1. String projectPath,
  2. String pageName,
  3. String pagePath
)

Implementation

Future<void> addRouteToRouter(
    String projectPath, String pageName, String pagePath) async {
  final routerFile =
      File(p.join(projectPath, 'lib', 'routes', 'app_router.dart'));
  if (!routerFile.existsSync()) {
    print('🛣️  app_router.dart not found. Initializing...');
    await initializeRouter(projectPath);
  }

  final projectName = getProjectName(projectPath);
  var content = routerFile.readAsStringSync();

  // 1. Add Import
  final normalizedPagePath = pagePath.replaceAll('\\', '/');
  final importPath = 'package:$projectName/$normalizedPagePath';
  final importLine = "import '$importPath';\n";

  if (!content.contains(importPath)) {
    content = importLine + content;
  }

  // 2. Add Route
  final routePath = '/${pageName.replaceAll('_', '-')}';
  final className = toPascalCase(pageName) + 'Page';

  final routeSnippet = """
      GoRoute(
        path: '$routePath',
        name: '$pageName',
        builder: (context, state) => const $className(),
      ),
      // [ROUTE_MARKER]""";

  if (!content.contains("path: '$routePath'")) {
    if (content.contains('// [ROUTE_MARKER]')) {
      content = content.replaceFirst('// [ROUTE_MARKER]', routeSnippet);
    } else if (content.contains('routes: [')) {
      // Fallback: try to inject before the closing bracket of the routes list
      final lastBracketIndex = content.lastIndexOf(']');
      if (lastBracketIndex != -1) {
        final beforeBracket = content.substring(0, lastBracketIndex);
        final afterBracket = content.substring(lastBracketIndex);
        content = beforeBracket +
            routeSnippet.replaceAll('// [ROUTE_MARKER]', '') +
            afterBracket;
      }
    }
    routerFile.writeAsStringSync(content);
    print('🛣️  Route added for $pageName in app_router.dart');
  }
}