safeEnumFromJson<T extends Enum> function
T?
safeEnumFromJson<T extends Enum>(})
Safely deserialize an enum from a JSON string value.
Handles unknown enum values by returning null or a default value based on the strategy chosen.
Parameters:
value: The string value from JSONenumValues: List of all possible enum values (useEnumType.values)defaultValue: Value to return for unknown strings (if null, returns null)onUnknownValue: Optional callback for logging unknown values
Returns:
The matched enum value, defaultValue, or null
Example:
extension PostStatusExtension on PostStatus {
static PostStatus? deserialize(String? value) {
return safeEnumFromJson(
value,
PostStatus.values,
defaultValue: PostStatus.draft,
onUnknownValue: (v) => logw('Unknown PostStatus: $v'),
);
}
}
Implementation
T? safeEnumFromJson<T extends Enum>(
String? value,
List<T> enumValues, {
T? defaultValue,
void Function(String unknownValue)? onUnknownValue,
}) {
if (value == null) return null;
try {
// Try to find matching enum by name
return enumValues.firstWhere(
(e) => e.name == value,
orElse: () => throw Exception('Unknown enum value: $value'),
);
} catch (e) {
// Unknown value encountered
if (onUnknownValue != null) {
onUnknownValue(value);
}
return defaultValue;
}
}