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);
}