decodeWidgetStateColor static method
Decodes a value
into a WidgetStateColor. If the value is a
String then the value will be used for all states.
Alternatively, if the value
is a Map then this expects the following
format:
{
"disabled": "<Color>",
"dragged": "<Color>",
"empty": "<Color>",
"error": "<Color>",
"focused": "<Color>",
"hovered": "<Color>",
"pressed": "<Color>",
"scrolledUnder": "<Color>",
"selected": "<Color>"
}
The "empty" will be used for when any other value is missing.
Implementation
static WidgetStateColor? decodeWidgetStateColor(
dynamic value, {
bool validate = true,
}) {
WidgetStateColor? result;
if (value is WidgetStateColor) {
result = value;
} else if (value is Color) {
result = WidgetStateColor.resolveWith((_) => value);
} else if (value != null) {
assert(SchemaValidator.validate(
schemaId: '$_baseSchemaUrl/widget_state_color',
value: value,
validate: validate,
));
result = WidgetStateColor.resolveWith((states) {
Color? result;
if (value is String) {
result = decodeColor(value, validate: false);
} else if (value is Color) {
result = value;
} else if (states.contains(WidgetState.disabled)) {
result = decodeColor(
value['disabled'],
validate: false,
);
} else if (states.contains(WidgetState.dragged)) {
result = decodeColor(
value['dragged'],
validate: false,
);
} else if (states.contains(WidgetState.error)) {
result = decodeColor(
value['error'],
validate: false,
);
} else if (states.contains(WidgetState.focused)) {
result = decodeColor(
value['focused'],
validate: false,
);
} else if (states.contains(WidgetState.hovered)) {
result = decodeColor(
value['hovered'],
validate: false,
);
} else if (states.contains(WidgetState.pressed)) {
result = decodeColor(
value['pressed'],
validate: false,
);
} else if (states.contains(WidgetState.scrolledUnder)) {
result = decodeColor(
value['scrolledUnder'],
validate: false,
);
} else if (states.contains(WidgetState.selected)) {
result = decodeColor(
value['selected'],
validate: false,
);
}
result ??= decodeColor(
value['empty'],
validate: false,
);
if (result == null) {
throw Exception(
'Unable to decode required Color for WidgetStateColor for state: $states and no "empty" value exists.',
);
}
return result;
});
}
return result;
}