addAssets static method

void addAssets(
  1. List<String> assetPaths
)

Implementation

static void addAssets(List<String> assetPaths) {
  final file = File(_pubspecPath);

  if (!file.existsSync()) return;

  final lines = file.readAsLinesSync();

  final existingAssets = _getAllAssets(lines);

  final toAdd = assetPaths.where((e) => !existingAssets.contains(e)).toList();

  if (toAdd.isEmpty) return;

  final result = <String>[];

  bool flutterFound = false;
  bool assetsFound = false;
  bool inserted = false;

  for (final line in lines) {
    final trimmed = line.trim();

    result.add(line);

    if (!line.startsWith(' ') && trimmed == 'flutter:') {
      flutterFound = true;
      continue;
    }

    if (flutterFound && line.startsWith('  ') && trimmed == 'assets:') {
      assetsFound = true;

      if (!inserted) {
        for (final asset in toAdd) {
          result.add('    - $asset');
        }

        inserted = true;
      }
    }
  }

  if (flutterFound && !assetsFound) {
    final flutterIndex = result.indexWhere(
      (e) => !e.startsWith(' ') && e.trim() == 'flutter:',
    );

    if (flutterIndex != -1) {
      result.insert(flutterIndex + 1, '  assets:');

      for (int i = 0; i < toAdd.length; i++) {
        result.insert(flutterIndex + 2 + i, '    - ${toAdd[i]}');
      }
    }
  }

  if (!flutterFound) {
    result.add('');
    result.add('flutter:');
    result.add('  assets:');

    for (final asset in toAdd) {
      result.add('    - $asset');
    }
  }

  file.writeAsStringSync('${result.join('\n')}\n');
}