describeEnum function Null safety
- Object enumEntry
Returns a short description of an enum value.
Strips off the enum class name from the enumEntry.toString().
For real enums, this is redundant with calling the name getter on the enum
value (see EnumName.name), a feature that was added to Dart 2.15.
This function can also be used with classes whose toString return a value
in the same form as an enum (the class name, a dot, then the value name).
For example, it's used with SemanticsAction, which is written to appear to
be an enum but is actually a bespoke class so that the index values can be
set as powers of two instead of as sequential integers.
enum Day {
monday, tuesday, wednesday, thursday, friday, saturday, sunday
}
void validateDescribeEnum() {
assert(Day.monday.toString() == 'Day.monday');
assert(describeEnum(Day.monday) == 'monday');
assert(Day.monday.name == 'monday'); // preferred for real enums
}
Implementation
String describeEnum(Object enumEntry) {
if (enumEntry is Enum) {
return enumEntry.name;
}
final String description = enumEntry.toString();
final int indexOfDot = description.indexOf('.');
assert(
indexOfDot != -1 && indexOfDot < description.length - 1,
'The provided object "$enumEntry" is not an enum.',
);
return description.substring(indexOfDot + 1);
}