generate method

  1. @override
Future<String> generate(
  1. LibraryReader library,
  2. BuildStep _
)

{ "floss": "3713", "description": "Salmon Very Light", "r": 255, "g": 226, "b": 226, "hex": "FFE2E2", "row": "row 01-01" }

Implementation

@override
Future<String> generate(LibraryReader library, BuildStep _) async {
  final Iterable<AnnotatedElement> dmc = library.annotatedWith(const TypeChecker.fromRuntime(DmcThreadsAnnotation));

  if (dmc.isEmpty) {
    return '';
  }

  final List<dynamic> dmcRawList = json.decode(DmcContent.rawData) as List<dynamic>;

  final String data = dmcRawList.map((dynamic rawData) {
    final Map<String, dynamic> dataMap = rawData as Map<String, dynamic>;

    final String name = dataMap['description'].toString();
    final String code = dataMap['floss'].toString();
    final String r = dataMap['r'].toString();
    final String g = dataMap['g'].toString();
    final String b = dataMap['b'].toString();
    final String? a = dataMap['a']?.toString();
    final String hex = dataMap['hex'].toString();

    final Lab lab = Utils.rgbaToLab(
      r: int.parse(r),
      g: int.parse(g),
      b: int.parse(b),
      a: a == null ? 255 : int.parse(a),
    );

    return '''
    Dmc(
      '$name',
      '$code',
      Rgba($r, $g, $b, a: ${a == null ? 255 : int.parse(a)}),
      '$hex',
      lab: Lab(${lab.l}, ${lab.a}, ${lab.b}),
    ),
    ''';
  }).join();

  final StringBuffer output = StringBuffer();

  output.write('''
  Iterable<Dmc> _dmc() {
    return const <Dmc>[
      $data
    ];
  }
  ''');

  return output.toString();
}