checkAndFixMaterialApp static method

bool checkAndFixMaterialApp(
  1. String mainDartPath, {
  2. bool dryRun = false,
})

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;
}