Dart中如何将字符串转换为枚举值?
将字符串转换为Dart枚举实例的实现方案
方法一:静态映射表(高效直接)
直接给枚举添加静态映射Map,就能实现你想要的XYZ.json['result']调用方式:
enum XYZ { addition, updation, remove } // 扩展枚举添加静态映射 extension XYZJsonExtension on XYZ { static const Map<String, XYZ> json = { 'addition': XYZ.addition, 'updation': XYZ.updation, 'remove': XYZ.remove, }; }
使用方式
// 假设fromJson得到的字符串是'remove' String result = 'remove'; XYZ enumValue = XYZ.json[result]!; // 非空断言需确保字符串在映射内,或用null安全处理(如?? 默认值)
方法二:遍历枚举值匹配(无需维护映射表)
如果枚举值较少,或者不想手动维护映射表,可以通过遍历枚举的values列表匹配字符串:
enum XYZ { addition, updation, remove } extension XYZFromStringExtension on XYZ { static XYZ? fromString(String str) { return XYZ.values.firstWhere( (enumItem) => enumItem.name == str, orElse: () => null, // 无匹配时返回null,也可抛出异常 ); } }
使用方式
String result = 'addition'; XYZ? enumValue = XYZ.fromString(result); // 若需要严格校验输入,可改为抛出异常 static XYZ fromString(String str) { return XYZ.values.firstWhere( (enumItem) => enumItem.name == str, orElse: () => throw ArgumentError('无效的XYZ字符串:$str'), ); }
注意事项
- 如果JSON字符串和枚举成员名存在大小写差异,可在匹配时统一格式,比如
enumItem.name.toLowerCase() == str.toLowerCase() - 针对null安全场景,建议用
?处理空值,或根据业务需求抛出异常保证输入合法性
内容的提问来源于stack exchange,提问作者Divyam Dhadwal
相关产品推荐
相关产品推荐

