Dart语言开中,一般枚举使用方式比较简单,有三种扩展方式
枚举方式1
enum ActivityType {
running,
climbing,
hiking,
cycling,
ski
}
extension ActivityTypeNumber on ActivityType {
int get number {
switch (this) {
case ActivityType.running:
return 1;
case ActivityType.climbing:
return 2;
case ActivityType.hiking:
return 5;
case ActivityType.cycling:
return 7;
case ActivityType.ski:
return 10;
}
}
}
extension ActivityTypeValue on ActivityType {
String get value {
switch (this) {
case ActivityType.running:
return 'Running';
case ActivityType.climbing:
return 'Climbing';
case ActivityType.hiking:
return 'Hiking';
case ActivityType.cycling:
return 'Cycling';
case ActivityType.ski:
return 'Skiing';
}
}
}
访问数字或String值:
final climbingInt = ActivityType.climbing.number;
final climbingString = ActivityType.climbing.value;
枚举方式2
enum WorkType {
electrician(name: '电工', grade: 2),
bricklayer(name: '瓦工', grade: 3),
carpentry(name: '木工', grade: 1);
const WorkType({required this.name, required this.grade});
//定义的属性是不可变的,需要使用 `final` 关键字修饰
final String name;
final int grade;
}
调用枚举
final String name = WorkType.bricklayer.name;
final int grade = WorkType.carpentry.grade;
枚举方式3
Flutter 3.0发布后我们不必再依赖这些代码,我们可以使用给枚举赋予一些类的特征,用新的和增强的枚举类重写代码。
enum ActivityType {
running(1, 'Running'),
climbing(2, 'Climbing'),
hiking(5, 'Hiking'),
cycling(7, 'Cycling'),
ski(10, 'Skiing'),
unknown(-1, '');
const ActivityType(this.number, this.value);
final int number;
final String value;
//静态方法
static ActivityType getTypeByTitle(String title) => ActivityType.values.firstWhere((activity) => activity.name == title,orElse: () => ActivityType.unknown);
static ActivityType getType(int number) => ActivityType.values.firstWhere((activity) => activity.number == number,orElse: () => ActivityType.unknown);
static String getValue(int number) => ActivityType.values.firstWhere((activity) => activity.number == number,orElse: () => ActivityType.unknown).value;
String activityString(String userName) => '$userName is $value';
}
调用枚举
final userIsWorkingOut = ActivityType.climbing.activityString('Emily Jules');
print('$userIsWorkingOut');
//输出
Emily Jules is Climbing
枚举比较
Enum.compareByIndex(value1, value2)
述代码总结:
-
如果
Enum.compareByIndex的结果小于零,则value1的枚举成员排序靠前;value2枚举成员排序靠后。 -
如果
Enum.compareByIndex的结果等于零,则value1和value2枚举成员是同一个。 -
如果
Enum.compareByIndex的结果大于零,则value1的枚举成员排序靠后;value2枚举成员排序靠前。