addImports static method

Future<void> addImports(
  1. String filePath,
  2. List<String> imports
)



Implementation

static Future<void> addImports(String filePath, List<String> imports) async {
  try {
    final file = File(filePath);

    if (!await file.exists()) {
      print('❌ File not found: $filePath');
      return;
    }

    var content = await file.readAsString();

    final normalizedImports = imports.map((imp) {
      imp = imp.trim();
      if (!imp.endsWith(';')) {
        imp = '$imp;';
      }
      return imp;
    }).toList();

    final importsToAdd = normalizedImports
        .where((imp) => !content.contains(imp))
        .toList();

    if (importsToAdd.isEmpty) {
      print('⚠️ All imports already exist');
      return;
    }

    final regex = RegExp(r"""import\s+['"](.+?)['"];""");
    final matches = regex.allMatches(content);
    final lastImportMatch = matches.isNotEmpty ? matches.last : null;

    String newContent;

    if (lastImportMatch != null) {
      final insertPosition = lastImportMatch.end;

      final importsText = importsToAdd.join('\n');

      newContent =
          '${content.substring(0, insertPosition)}\n$importsText\n${content.substring(insertPosition)}';
    } else {
      final importsText = importsToAdd.join('\n');
      newContent = '$importsText\n\n$content';
    }

    await file.writeAsString(newContent);

    print('✅ Imports added successfully:');
    for (var imp in importsToAdd) {
      print('   ➕ $imp');
    }
  } catch (e) {
    print('❌ Error: $e');
  }
}