Enum
理論上都是搭配 int
,若要搭配 String
,則要搭配 Extension
。
Version
Dart 3.5.4
Enum
device_type_enum.dart
enum DeviceTypeEnum {
gw, // 主機
cam, // 攝影機
sensor, // 感測器
}
extension DeviceTypeEnumEx on DeviceTypeEnum {
String get code {
switch (this) {
case DeviceTypeEnum.gw:
return "GW";
case DeviceTypeEnum.cam:
return "CAM";
case DeviceTypeEnum.sensor:
return "Sensor";
default:
return "GW";
}
}
static DeviceTypeEnum? fromCode(String code) {
switch (code) {
case "GW":
return DeviceTypeEnum.gw;
case "CAM":
return DeviceTypeEnum.cam;
case "Sensor":
return DeviceTypeEnum.sensor;
default:
return null;
}
}
}
Line 1
enum DeviceTypeEnum {
gw, // 主機
cam, // 攝影機
sensor, // 感測器
}
enum
:一樣使用enum
定義DeviceTypeEnum
,此時gw
、cam
與sensor
仍定義為0
、1
、2
Line 7
extension DeviceTypeEnumEx on DeviceTypeEnum {
}
extension
:使用extension
以DeviceTypeEnum
為基礎定義DeviceTypeEnumEx
Line 8
String get code {
switch (this) {
case DeviceTypeEnum.gw:
return "GW";
case DeviceTypeEnum.cam:
return "CAM";
case DeviceTypeEnum.sensor:
return "Sensor";
default:
return "GW";
}
}
- 定義
code
getter 將Enum
轉String
Line 21
static DeviceTypeEnum? fromCode(String code) {
switch (code) {
case "GW":
return DeviceTypeEnum.gw;
case "CAM":
return DeviceTypeEnum.cam;
case "Sensor":
return DeviceTypeEnum.sensor;
default:
return null;
}
}
- 定義
fromCode()
將String
轉Enum
Enum to String
import "device_type_enum.dart";
void main() {
var result = DeviceTypeEnum.gw;
print('result: ${result.code}');
}
result
:為 DeviceTypeEnum 型別code
:使用code
getter 將 Enum 轉 String
String to Enum
import "device_type_enum.dart";
void main() {
var code = 'GW';
DeviceTypeEnum? deviceType = DeviceTypeEnumEx.fromCode(code);
if (deviceType == null) {
print('No matching device type found');
} else {
print('deviceType: ${deviceType.name}');
}
}
fromCode()
:使用DeviceTypeEnumEx
的fromCode()
String 轉成 Enumnull
:轉型失敗,並非所允許的 Stringname
:由name
取得 Enum 的 key
Conclusion
- 透過 Extension 則 Enum 也可搭配 String
- 由 Extension 提供
code
getter 將 Enum 轉 String - 由 Extesnsio 提供
fromCode
將 String 轉 Enum