parseMultiShade static method

MultiShadeClassWrapper parseMultiShade(
  1. Map<String, dynamic> data,
  2. String shadedSwatchPrefix
)

Implementation

static MultiShadeClassWrapper parseMultiShade(
    Map<String, dynamic> data, String shadedSwatchPrefix) {
  final List<MultiShadeColorConfig> configs = [];
  final List<ShadedSwatch> swatch = [];
  List<Set<dynamic>> existedShade = [];
  data.forEach((key, value) {
    final colorName = key;
    if (value is! YamlMap) {
      throw const YamlFileHaveWrongFormat();
    }
    final YamlMap resolvedValue = value;
    final currentSet = resolvedValue.keys.toSet();
    int? indexMatch;
    for (int i = 0; i < existedShade.length; i++) {
      if (_setEquals(existedShade[i], currentSet)) {
        indexMatch = i;
        break;
      }
    }
    if (indexMatch == null) {
      indexMatch = existedShade.length;
      existedShade.add(currentSet);
      swatch.add(
        ShadedSwatch(
          className: "$shadedSwatchPrefix$indexMatch",
          shades: resolvedValue.keys.map((e) => e.toString()).toList(),
        ),
      );
    }
    final shadedClassName = "$shadedSwatchPrefix$indexMatch";
    final List<SingleColorConfig> singleShadeColorConfig = [];
    resolvedValue.forEach(
      (key, value) {
        if (value is YamlMap) {
          singleShadeColorConfig
              .add(SingleColorConfig.parse(name: key, data: value));
        } else if (value is int) {
          singleShadeColorConfig
              .add(SingleColorConfig.parseFromHex(name: key, data: value));
        } else {
          throw const YamlFileHaveWrongFormat();
        }
      },
    );
    final multiShadeColorConfig = MultiShadeColorConfig(
      configs: singleShadeColorConfig,
      shadedClassName: shadedClassName,
      variableName: colorName,
    );
    configs.add(multiShadeColorConfig);
  });
  return MultiShadeClassWrapper(configs: configs, swatch: swatch);
}