假设有一个如下所示的枚举:
enum MyEnum {
horse,
cow,
camel,
sheep,
goat,
}
您可以使用values
属性遍历枚举的值:
for (var value in MyEnum.values) {
print(value);
}
// MyEnum.horse
// MyEnum.cow
// MyEnum.camel
// MyEnum.sheep
// MyEnum.goat
每个值都有一个索引:
int index = MyEnum.horse.index; // 0
你可以使用下标符号将索引转换回枚举:
MyEnum value = MyEnum.values[0]; // MyEnum.horse
结合这些事实,您可以循环枚举的值来查找下一个值,如下所示:
MyEnum nextEnum(MyEnum value) {
final nextIndex = (value.index + 1) % MyEnum.values.length;
return MyEnum.values[nextIndex];
}
使用模运算符处理即使在枚举值列表的末尾处也可以处理索引:
MyEnum nextValue = nextEnum(MyEnum.goat); // MyEnum.horse
enum Fruites { Mango, Banana, Cherry, Avacado, Papaya }
void main() {
Fruites.values.forEach((name) {
print(name);
});
}
输出:
Fruites.Mango
Fruites.Banana
Fruites.Cherry
Fruites.Avacado
Fruites.Papaya
仅取名称部分
print(name.toString().split('.').elementAt(1));
输出:
Mango
Banana
Cherry
Avacado
Papaya
使用Flutter 3.0中的枚举,您可以拥有额外的函数来获取所有枚举值或通过字符串值获取一个枚举值,例如:
enum RepeatState {
playSongOnce,
repeatSong,
repeatPlaylist;
static RepeatState getEnum(String name) => RepeatState.values.firstWhere((element) => element.name == name);
static List<String> stringValues() => RepeatState.values.map((e) => e.name).toList();
}
StatusEnum.purple.value
并调用我们的额外函数:print('${RepeatState.stringValues()}');
print('${RepeatState.getEnum('repeatSong')}');
I/flutter (14298): [playSongOnce, repeatSong, repeatPlaylist]
I/flutter (14298): RepeatState.repeatSong
关于新枚举的更多信息请参见此处。
RepeatState.next
的获取器(getter)呢? - Suragch