checkAndFixMaterialApp static method
Check if main.dart has MaterialApp with localization delegates
Implementation
static bool checkAndFixMaterialApp(String mainDartPath,
{bool dryRun = false}) {
final file = File(mainDartPath);
if (!file.existsSync()) {
print('⚠️ main.dart not found at $mainDartPath');
return false;
}
final content = file.readAsStringSync();
final parseResult =
parseString(content: content, throwIfDiagnostics: false);
final unit = parseResult.unit;
final visitor = _MaterialAppVisitor();
unit.accept(visitor);
if (!visitor.hasMaterialApp) {
print('ℹ️ No MaterialApp found in main.dart');
return false;
}
bool needsLocalizationsDelegates = !visitor.hasLocalizationsDelegates;
bool needsSupportedLocales = !visitor.hasSupportedLocales;
bool needsImports = !visitor.hasAppLocalizationsImport ||
!visitor.hasFlutterLocalizationsImport;
if (!needsLocalizationsDelegates &&
!needsSupportedLocales &&
!needsImports) {
print('✅ MaterialApp already has proper localization configuration');
return true;
}
print('🔧 MaterialApp needs localization configuration:');
if (needsImports) print(' - Missing imports');
if (needsLocalizationsDelegates)
print(' - Missing localizationsDelegates');
if (needsSupportedLocales) print(' - Missing supportedLocales');
if (dryRun) {
print(' [DRY RUN] Would add localization configuration to MaterialApp');
return true;
}
// Add the necessary configuration
var modifiedContent = content;
// Add imports if needed
if (needsImports) {
modifiedContent = _addLocalizationImports(modifiedContent);
}
// Add MaterialApp properties if needed
if (needsLocalizationsDelegates || needsSupportedLocales) {
modifiedContent = _addMaterialAppProperties(
modifiedContent,
addDelegates: needsLocalizationsDelegates,
addLocales: needsSupportedLocales,
);
}
file.writeAsStringSync(modifiedContent);
print('✅ Updated main.dart with localization configuration');
return true;
}