我使用下面的函数来获取枚举值的名称,反之亦然,通过名称获取枚举值:
String enumValueToString(Object o) => o.toString().split('.').last;
T enumValueFromString<T>(String key, Iterable<T> values) => values.firstWhere(
(v) => v != null && key == enumValueToString(v),
orElse: () => null,
);
当使用Dart 2.7及更高版本时,扩展方法将在此处(以及其他任何对象)起作用:
extension EnumX on Object {
String asString() => toString().split('.').last;
}
上面的实现不依赖于特定的枚举。
用法示例:
enum Fruits {avocado, banana, orange}
...
final banana = enumValueFromString('banana', Fruits.values);
print(enumValueToString(banana));
print(banana.asString());
从2020-04-05编辑:添加了可空性检查。values
参数可以是Iterable
,不一定是List
。添加了扩展方法实现。<Fruits>
从示例中删除了注释,以表明不需要类名重复。