addRouteToRouter function
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');
}
}