flutter - Flutter 不适用于 swtich 语句的自定义枚举
问题描述
abstract class Enum<T> {
final T value;
const Enum(this.value);
}
class FlightScheduleStatus<int> extends Enum<int> {
const FlightScheduleStatus(int val) : super(val);
static const None = const FlightScheduleStatus(0);
static const OnTime = const FlightScheduleStatus(1);
static const Delayed = const FlightScheduleStatus(2);
}
Widget getFlightStates(LiveStatus liveStatus) {
switch (liveStatus.flightScheduleStatus) {
case FlightScheduleStatus.Delayed:
return Row(
children: <Widget>[
Text('Delayed'),
SizedBox(
width: 3,
),
Chip(
label: Text('${liveStatus.delayedTime}'),
backgroundColor: Colors.red,
),
],
);
break;
case FlightScheduleStatus.OnTime:
return Text('On Time');
break;
case FlightScheduleStatus.None:
return Text('N/A');
break;
}
}
在这里,我使用自定义类创建了自定义枚举。但是当我们使用 switch 语句时并没有经过这里的任何情况。请在这个问题上帮助我。如果它是一个枚举类,我想按原样工作。
即使我使用liveStatus.flightScheduleStatus.value
它也不工作。
解决方案
我想问题是您的FlightScheduleStatus
类实际上允许您创建具有相同内部值的多个对象实例。由于您有一个公共构造函数,FlightScheduleStatus
我猜您正在代码中的其他地方使用它来将 a 转换int
为 a FlightScheduleStatus
。如果是这种情况,您确实需要使用工厂构造函数,如下例所示:
abstract class Enum<T> {
final T value;
const Enum(this.value);
}
class FlightScheduleStatus extends Enum<int> {
const FlightScheduleStatus._(int val) : super(val);
factory FlightScheduleStatus(int val) {
if (val == None.value) {
return None;
} else if (val == OnTime.value) {
return OnTime;
} else if (val == Delayed.value) {
return Delayed;
}
throw Exception('$val is not a valid value for FlightScheduleStatus.');
}
static const None = const FlightScheduleStatus._(0);
static const OnTime = const FlightScheduleStatus._(1);
static const Delayed = const FlightScheduleStatus._(2);
}
void main() {
var test = FlightScheduleStatus(0);
switch (test) {
case FlightScheduleStatus.None:
print('None'); // <-- this is the one executed
break;
case FlightScheduleStatus.OnTime:
print('OnTime');
break;
case FlightScheduleStatus.Delayed:
print('Delayed');
break;
}
}
在示例中,我为FlightScheduleStatus
私有创建了普通的构造函数,因此它只能单独使用FlightScheduleStatus
。工厂构造函数允许我们返回已经创建的对象,而不是创建新对象。
推荐阅读
- android - 在 Anbox 中为 Android 提供位置信息 (GPS)
- php - 如何更新我的数组并在 codeigniter 中返回
- c# - C# 中 OnnxRuntime 张量的高效位图
- python - “Python 已停止工作” - 当我尝试将记录从数据库显示到 QListWidget
- tensorflow - 通用句子编码器嵌入运行时错误:分配器 CPU 耗尽资源
- javascript - 从 JavaScript 中的每个其他数组中找到包含至少一个元素的最小子数组的最简单方法是什么?
- react-native - react-native-code-push 如何判断更新?
- python - 如何从 Python 处理中的主文件导入变量?
- javascript - 忽略空对象
- android - 从片段检索时静态变量为空,在另一个片段上工作?