DART - 我可以将字符串转换为枚举吗?

时间:2015-12-07 12:08:18

标签: enums dart

有没有办法将字符串转换为枚举?

enum eCommand{fred, joe, harry}

eCommand theCommand= cast(eCommand, 'joe');??

我想我只需要搜索枚举(例如循环)。

欢呼声

史蒂夫

4 个答案:

答案 0 :(得分:3)

我想出了一个受https://pub.dev/packages/enum_to_string启发的解决方案,可以将其用作List上的简单扩展

extension EnumTransform on List {
  String string<T>(T value) {
    if (value == null || (isEmpty)) return null;
    var occurence = singleWhere(
        (enumItem) => enumItem.toString() == value.toString(),
        orElse: () => null);
    if (occurence == null) return null;
    return occurence.toString().split('.').last;
  }

  T enumFromString<T>(String value) {
    return firstWhere((type) => type.toString().split('.').last == value,
        orElse: () => null);
  }
}

用法

enum enum Color {
  red,
  green,
  blue,
}

var colorEnum = Color.values.enumFromString('red');
var colorString: Color.values.string(Color.red)

答案 1 :(得分:2)

我遇到了同样的问题,一个小的枚举和一个字符串,所以我做到了

dynamic _enum_value = EnumFromString(MyEnum.values, string_to_enum);

dynamic EnumFromString(List values, String comp){
  dynamic enumValue = null;
  values.forEach((item) {
    if(item.toString() == comp){
      enumValue =  item;
    }
  });
  return enumValue;
}

我知道这不是最好的解决方案,但是它可行。

答案 2 :(得分:1)

对于Dart枚举,这有点麻烦。

请参阅Enum from String了解解决方案。

如果你需要的不仅仅是枚举的最基本功能,那么使用旧式枚举通常会更好 - 这是一个带有const成员的类。

有关旧式枚举的信息,请参阅How can I build an enum with Dart?

答案 3 :(得分:0)

我对枚举状态感到恼火,并建立了一个库来处理此问题:

https://pub.dev/packages/enum_to_string

基本用法:

import 'package:enum_to_string:enum_to_string.dart';

enum TestEnum { testValue1 };

main(){
    final result = EnumToString.fromString(TestEnum.values, "testValue1");
    // TestEnum.testValue1
}

比我想要的还要冗长,但可以完成工作。