generateAssetsUtils function
Generate AssetsUtils Dart file with extensions grouped and unique variable names
Implementation
Future<void> generateAssetsUtils() async {
ConsoleLog.title('Generating AssetsUtils');
final start = DateTime.now();
DartgenxConfig config = DartgenxConfig.load();
final assetsFolder = p.join(Directory.current.path, config.inputPath?.assets ?? 'assets');
final files = fetchAssetsFiles(assetsFolder);
if (files.isEmpty) {
ConsoleLog.error('No assets found. Skipping generation.');
return;
}
final buffer = StringBuffer();
buffer.writeln('/*');
buffer.writeln(
' * Created by DartGenX CLI tool on ${DateFormat('EEE, dd MMM yyyy, h:mm a').format(DateTime.now())}');
buffer.writeln(' */');
buffer.writeln('');
buffer.writeln('class AssetsUtils {');
buffer.writeln(' AssetsUtils._();\n');
// Group files by extension
final grouped = <String, List<Map<String, String>>>{};
for (var file in files) {
final ext = file['extension']!;
grouped.putIfAbsent(ext, () => []).add(file);
}
// Track used variable names to avoid duplicates
final usedNames = <String>{};
final sortedExtensions = grouped.keys.toList()..sort();
for (var ext in sortedExtensions) {
buffer.writeln(' // ---------- $ext files ----------');
for (var file in grouped[ext]!) {
var varName = file['name']!;
var counter = 1;
while (usedNames.contains(varName)) {
varName = '${file['name']}_$counter';
counter++;
}
usedNames.add(varName);
buffer.writeln(' static const String $varName = "${file['path']}";');
}
buffer.writeln('');
}
buffer.writeln('}');
// Write to file
final outputFile = File(config.outputPath?.assetsUtils ?? 'lib/assets_utils.dart');
outputFile.createSync(recursive: true);
outputFile.writeAsStringSync(buffer.toString());
ConsoleLog.success(
'AssetsUtils generated with ${files.length} assets at ${config.outputPath?.assetsUtils ?? 'lib/assets_utils.dart'}');
final duration = DateTime.now().difference(start).inMilliseconds;
ConsoleLog.info('⌚ Completed in ${duration}ms');
ConsoleLog.line();
}