parseMultiShade static method
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);
}