generateAssets function

Future<String> generateAssets(
  1. AssetsGenConfig config,
  2. DartFormatter formatter
)

Implementation

Future<String> generateAssets(
  AssetsGenConfig config,
  DartFormatter formatter,
) async {
  if (config.assets.isEmpty) {
    throw const InvalidSettingsException(
      'The value of "flutter/assets:" is incorrect.',
    );
  }

  final integrations = <Integration>[
    if (config.flutterGen.integrations.image)
      ImageIntegration(
        config.packageParameterLiteral,
        parseMetadata: config.flutterGen.parseMetadata,
      ),
    if (config.flutterGen.integrations.flutterSvg)
      SvgIntegration(
        config.packageParameterLiteral,
        parseMetadata: config.flutterGen.parseMetadata,
      ),
    if (config.flutterGen.integrations.rive)
      RiveIntegration(
        config.packageParameterLiteral,
      ),
    if (config.flutterGen.integrations.lottie)
      LottieIntegration(
        config.packageParameterLiteral,
      ),
  ];

  // Warn for deprecated configs.
  final deprecatedStyle = config.flutterGen.assets.style != null;
  final deprecatedPackageParam =
      config.flutterGen.assets.packageParameterEnabled != null;
  if (deprecatedStyle || deprecatedPackageParam) {
    final deprecationBuffer = StringBuffer();
    deprecationBuffer.writeln(sDeprecationHeader);
    if (deprecatedStyle) {
      deprecationBuffer.writeln(
        sBuildDeprecation(
          'style',
          'asset',
          'asset.output',
          'https://github.com/FlutterGen/flutter_gen/pull/294',
          [
            '  assets:',
            '    outputs:',
            '      style: snake-case',
          ],
        ),
      );
    }
    if (deprecatedPackageParam) {
      deprecationBuffer.writeln(
        sBuildDeprecation(
          'package_parameter_enabled',
          'asset',
          'asset.output',
          'https://github.com/FlutterGen/flutter_gen/pull/294',
          [
            '  assets:',
            '    outputs:',
            '      package_parameter_enabled: true',
          ],
        ),
      );
    }
    throw InvalidSettingsException(deprecationBuffer.toString());
  }

  final classesBuffer = StringBuffer();
  final _StyleDefinition definition;
  switch (config.flutterGen.assets.outputs.style) {
    case FlutterGenElementAssetsOutputsStyle.dotDelimiterStyle:
      definition = _dotDelimiterStyleDefinition;
      break;
    case FlutterGenElementAssetsOutputsStyle.snakeCaseStyle:
      definition = _snakeCaseStyleDefinition;
      break;
    case FlutterGenElementAssetsOutputsStyle.camelCaseStyle:
      definition = _camelCaseStyleDefinition;
      break;
  }
  classesBuffer.writeln(await definition(config, integrations));

  final imports = <Import>{};
  for (final integration in integrations.where((e) => e.isEnabled)) {
    imports.addAll(integration.requiredImports);
    classesBuffer.writeln(integration.classOutput);
  }

  final importsBuffer = StringBuffer();
  for (final e in imports.sorted((a, b) => a.import.compareTo(b.import))) {
    importsBuffer.writeln(import(e));
  }

  final buffer = StringBuffer();
  buffer.writeln(header);
  buffer.writeln(ignore);
  buffer.writeln(importsBuffer.toString());
  buffer.writeln(classesBuffer.toString());
  return formatter.format(buffer.toString());
}