Another solution with enhanced enums, plus:
- More propertie(s) attached to enum values
- Factory constructor
- Fallback value in constructor
- Implementation of the Comparable interface
- Overload of comparison operator(s)
- Conversion to map
Tested on Dart 2.19.6.
enum AuthLevel implements Comparable<AuthLevel> {
guest(1, 'Guest'),
user(2, 'Registered user'),
admin(5, 'Administrator'),
developer(9, 'Developer');
final int level;
final String desc;
const AuthLevel(this.level, this.desc);
// Conversion from int
factory AuthLevel.fromInt(int level) =>
values.firstWhere((value) => value.level == level, orElse: () => guest);
// Conversion to int
int get toInt => level;
@override
int compareTo(AuthLevel other) => level - other.level;
// Comparison operator(s)
bool operator >=(AuthLevel other) => level >= other.level;
// ... possibly add more
@override
String toString() => '{level: $level, desc: $desc}';
// Conversion to map
Map<int, String> toMap() =>
{for (var value in AuthLevel.values) value.level: value.desc};
}