addAssets method
Adds a list of assets to the pubspec.yaml under the flutter: assets: section.
Implementation
void addAssets(String pubspecPath, List<String> assetPaths) {
final file = File(pubspecPath);
if (!file.existsSync()) {
throw CliException('pubspec.yaml not found at $pubspecPath');
}
final lines = file.readAsLinesSync();
int flutterIndex = -1;
for (int i = 0; i < lines.length; i++) {
if (lines[i].trim() == 'flutter:' && !lines[i].startsWith(' ')) {
flutterIndex = i;
break;
}
}
if (flutterIndex == -1) {
// Append flutter: section with assets
lines.add('');
lines.add('flutter:');
lines.add(' assets:');
for (final asset in assetPaths) {
lines.add(' - $asset');
}
file.writeAsStringSync(lines.join('\n'));
return;
}
// Find if 'assets:' is already under 'flutter:'
int assetsIndex = -1;
for (int i = flutterIndex + 1; i < lines.length; i++) {
final line = lines[i];
if (line.isNotEmpty && !line.startsWith(' ') && !line.startsWith('#')) {
break; // Out of flutter section
}
if (line.trim() == 'assets:') {
assetsIndex = i;
break;
}
}
if (assetsIndex == -1) {
// Insert assets: line and the items
final insertLines = [' assets:'];
for (final asset in assetPaths) {
insertLines.add(' - $asset');
}
lines.insertAll(flutterIndex + 1, insertLines);
} else {
// Insert assets under the existing assets: block
final insertLines = <String>[];
for (final asset in assetPaths) {
// check if asset already added
bool alreadyExists = false;
for (int i = assetsIndex + 1; i < lines.length; i++) {
final line = lines[i];
if (line.trim().startsWith('- ') && line.contains(asset)) {
alreadyExists = true;
break;
}
if (line.isNotEmpty && !line.startsWith(' ') && !line.startsWith(' -')) {
break; // Finished assets section
}
}
if (!alreadyExists) {
insertLines.add(' - $asset');
}
}
lines.insertAll(assetsIndex + 1, insertLines);
}
file.writeAsStringSync(lines.join('\n'));
}