如何在 Dart 中循环枚举

Sur*_*gch 3 enums dart flutter

我的 Flutter 项目中有一个 Dart 枚举,如下所示:

enum RepeatState {
  playSongOnce,
  repeatSong,
  repeatPlaylist,
}
Run Code Online (Sandbox Code Playgroud)

如果我有一些随机的枚举状态,比如 RepeatState.repeatSong,我如何迭代到下一个枚举(不做类似用 switch 语句映射它们的事情)?

我在thisthisthis的帮助下找到了答案,所以我把它贴在下面。

Sur*_*gch 14

鉴于这样的枚举,

enum MyEnum {
  horse,
  cow,
  camel,
  sheep,
  goat,
}
Run Code Online (Sandbox Code Playgroud)

循环枚举的值

您可以使用以下values属性迭代枚举的值:

for (var value in MyEnum.values) {
  print(value);
}

// MyEnum.horse
// MyEnum.cow
// MyEnum.camel
// MyEnum.sheep
// MyEnum.goat
Run Code Online (Sandbox Code Playgroud)

在一个值和它的索引之间转换

每个值都有一个索引:

int index = MyEnum.horse.index; // 0
Run Code Online (Sandbox Code Playgroud)

您可以使用下标符号将索引转换回枚举:

MyEnum value = MyEnum.values[0]; // MyEnum.horse
Run Code Online (Sandbox Code Playgroud)

查找下一个枚举值

结合这些事实,您可以遍历枚举的值以找到下一个值,如下所示:

MyEnum nextEnum(MyEnum value) {
  final nextIndex = (value.index + 1) % MyEnum.values.length;
  return MyEnum.values[nextIndex];
}
Run Code Online (Sandbox Code Playgroud)

即使索引位于枚举值列表的末尾,也可以使用模运算符句柄:

MyEnum nextValue = nextEnum(MyEnum.goat); // MyEnum.horse
Run Code Online (Sandbox Code Playgroud)


San*_*era 8

enum Fruites { Mango, Banana, Cherry, Avacado, Papaya }

void main() {
  Fruites.values.forEach((name) {
    print(name);
  });
}
Run Code Online (Sandbox Code Playgroud)

输出:

Fruites.Mango
Fruites.Banana
Fruites.Cherry
Fruites.Avacado
Fruites.Papaya
Run Code Online (Sandbox Code Playgroud)

仅取姓名部分

print(name.toString().split('.').elementAt(1));
Run Code Online (Sandbox Code Playgroud)

输出:

Mango
Banana
Cherry
Avacado
Papaya
Run Code Online (Sandbox Code Playgroud)