You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 12:20:28