generate method

String? generate({
  1. required String projectPath,
  2. required List<DiscoveredAsset> assets,
  3. String? relativeFilePath,
})

Generates the Assets constant class for assets in projectPath at relativeFilePath.

Defaults to lib/core/constants/assets.dart if relativeFilePath is null. Does nothing if assets is empty.

Implementation

String? generate({
  required String projectPath,
  required List<DiscoveredAsset> assets,
  String? relativeFilePath,
}) {
  if (assets.isEmpty) return null;

  final relPath =
      (relativeFilePath != null && relativeFilePath.trim().isNotEmpty)
          ? relativeFilePath.trim()
          : 'lib/core/constants/assets.dart';

  final fieldNameMap = _resolveFieldNames(assets);

  final buffer = StringBuffer();
  buffer.writeln('// GENERATED FILE - DO NOT EDIT BY HAND');
  buffer.writeln('// Run flutter_setup regeneration to update.');
  buffer.writeln();
  buffer.writeln('class Assets {');
  buffer.writeln('  Assets._();');
  buffer.writeln();

  final sortedEntries = fieldNameMap.entries.toList()
    ..sort((a, b) => a.key.compareTo(b.key));

  for (final entry in sortedEntries) {
    final fieldName = entry.key;
    final asset = entry.value;
    buffer.writeln(
        "  static const String $fieldName = '${asset.relativePath}';");
  }

  buffer.writeln('}');

  final targetFile = File(p.join(projectPath, relPath));
  final parentDir = targetFile.parent;
  if (!parentDir.existsSync()) {
    parentDir.createSync(recursive: true);
  }

  targetFile.writeAsStringSync(buffer.toString());
  return relPath;
}