removeDependency method

Future<void> removeDependency(
  1. String packageName, {
  2. bool isDev = false,
})

Removes a dependency from pubspec.yaml

Implementation

Future<void> removeDependency(String packageName,
    {bool isDev = false}) async {
  final pubspec = await _loadPubspec();
  final targetBlock = isDev ? 'dev_dependencies' : 'dependencies';

  final deps = pubspec[targetBlock] as Map<String, dynamic>? ?? {};

  if (!deps.containsKey(packageName)) {
    return; // Not installed
  }

  final file = File(pubspecPath);
  final lines = await file.readAsLines();

  bool insideBlock = false;
  final newLines = <String>[];

  for (var i = 0; i < lines.length; i++) {
    final line = lines[i];
    if (line.trim() == 'dependencies:') {
      insideBlock = !isDev;
    } else if (line.trim() == 'dev_dependencies:') {
      insideBlock = isDev;
    } else if (line.trim().endsWith(':') &&
        !line.startsWith(' ') &&
        line.trim() != 'dependencies:' &&
        line.trim() != 'dev_dependencies:') {
      // another top level block
      insideBlock = false;
    }

    if (insideBlock) {
      if (line.trim().startsWith('$packageName:')) {
        continue; // Skip this line to remove it
      }
    }
    newLines.add(line);
  }

  await file.writeAsString(newLines.join('\n') + '\n');
}