generateCode method

  1. @override
GenerationResult generateCode(
  1. List<FileConfig> fileCfgs
)
override

Implementation

@override
GenerationResult generateCode(List<FileConfig> fileCfgs) {
  final buffer = StringBuffer();
  final varReferrers = <String>[];

  for (final fileConfig in fileCfgs) {
    final file = File(fileConfig.fullPath);
    final fileName = path.basenameWithoutExtension(fileConfig.fullPath);
    final extension = path.extension(fileConfig.fullPath);

    // Generate base64 content
    final bytes = file.readAsBytesSync();
    final base64Content = base64Encode(bytes);

    // Generate constants
    final pathConstName = '\$${fileConfig.uid}_epkg_path';
    final base64ConstName = '\$${fileConfig.uid}_base64';
    final bytesConstName = '\$${fileConfig.uid}_bytes';

    // Convert to Flutter package asset path format: packages/{packageName}/{relativePath}
    final relativePath = path.relative(
      fileConfig.fullPath,
      from: Directory.current.path,
    );
    final normalizedPath = relativePath.replaceAll('\\', '/');
    final packagePath = PackagePathUtils.getPackageAssetPath(normalizedPath);

    buffer.writeln('const String $pathConstName = \'$packagePath\';');
    buffer.writeln('const String $base64ConstName = \'$base64Content\';');
    buffer.writeln(
      'final Uint8List $bytesConstName = base64Decode($base64ConstName);',
    );
    buffer.writeln();

    // Create valid Dart identifier
    final dartIdentifier = IdentifierUtils.createValidIdentifier(
      fileName + extension.replaceAll('.', '_'),
    );
    varReferrers.add(
      'Image get $dartIdentifier => Image.memory($bytesConstName);',
    );
  }

  return GenerationResult(varReferrers.join('\n  '), buffer.toString());
}