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()) return;

  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 = pageName
          .split('_')
          .map((e) => e[0].toUpperCase() + e.substring(1))
          .join() +
      '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');
  }
}