问题由来
最近在看尝试Flutter,在开发时打算用枚举标示5个常用的按键KeyCode,因为就值关系特定几个KeyCode,所以打算仅设定5个枚举值,并且指定其原始值为其int值。但是我发现没办法指定这个int值。
一、原始值指定
Dart语言的枚举不支持指定原始值,比如下面这种方式:
enum Color {
Red = 3, // Error
Green = 6, // Error
这样一来,如果想使枚举值有一个比较大的原始值,就只能使用本文件中KeyCode这种方式。一般如下:
enum Color {
Red, // 0
Green, // 1
Blue, // 2
... // 从3到32都需要填满
Brown, // 33
... // 从34到43都需要填满
Pink, // 44
但是如果我只想用Brown到Pink颜色这几种颜色,并且其原始值在100以上呢?比如键盘KeyCode☹️就有好多。
二、原始值与枚举值转换
另外Dart语言枚举值到原始值的转换,直接取其index即可:
Color.Green.index == 1 // true
但却不支持从int原始值转换为枚举值,比如下面这种方式:
enum Color {
Red, // 0
Green, // 1
Blue, // 2
// 疯狂实验中
Color red = Color(0); // Error
Color red = (Color)0; // Error
Color red = new Color(0); // Error
Color red = const Color(0); // Error
但enum提供了一个values属性,比如上面枚举有:
Color.values = List<Color>[Color.Red, ... , Color.Blue]
Color.values是一个有序数组,其下标和该位置的Color枚举值的原始值相等。
所以,如果一个枚举满足:1. 从零开始,2. 各个值密集排布,(Dart肯定满足,因为没办法指定原始值),