dart Enum 知识点一

457 阅读1分钟

1 定义

enum PayType {
  wx (name: "wx",grade: 100),
  zfb (name: "zxf",grade: 200);

   //属性前必须有final
  final String name;
  final int grade;

   //构造函数必须有const
  const PayType({required this.name, required this.grade});
}

2 遍历

for(var element in PayType.values){
  print('name==${element.name}');
  print("index==${element.index}");
}

3 扩展

extension PayTypeExt on PayType {
  // static 方法 能被 PayTypeExt 调用
  static PayType getWithIndex(int index){
    return PayType.values[index];
  }

  static PayType getWithName(String name){
    for(var element in PayType.values){
      if(element.name == name) return element;
    }
    throw Exception("NO Value name is $name");
  }
}

extension EnumByName<T extends Enum> on Iterable<T> {
  // 通过字符串获取枚举
  T byName(String name) {
    for (var value in this) {
      if (value.name == name) return value;
    }
    throw ArgumentError.value(name, "name", "No enum value with that name");
  }

  Map<String, T> asNameMap() =>
      <String, T>{for (var value in this) value.name: value};
}

调用

PayTypeExt.getWithIndex(0);
PayTypeExt.getWithName("wx");

PayType.values.byName("wx");
PayType.values.asMap();