addImport static method

Future<void> addImport({
  1. required String filePath,
  2. required List<String> importStatements,
})

Implementation

static Future<void> addImport({
  required String filePath,
  required List<String> importStatements,
}) async {
  final file = File(filePath);
  final lines = await file.readAsLines();

  // `dart format` may wrap a long import across multiple physical lines
  // (e.g. `import '...'\n    show Foo;`). Comparing against a
  // whitespace-collapsed view of the file detects an already-present import
  // regardless of how it was wrapped or indented, so we never insert a
  // duplicate after the project has been formatted.
  final existing = StringBuffer(collapseWhitespace(lines.join(' ')));
  for (var importStatement in importStatements) {
    final normalized = collapseWhitespace(importStatement);
    if (!existing.toString().contains(normalized)) {
      lines.insert(0, importStatement);
      existing.write(' $normalized');
    }
  }
  await file.writeAsString(lines.join('\n'));
}