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
的公共(public)构造函数,所以我想您正在代码中的其他地方使用该构造函数将int
转换为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
的常规构造函数设为私有(private),因此它仅由FlightScheduleStatus
本身使用。工厂构造函数允许我们返回已经创建的对象,而不是创建新的对象。关于flutter - Flutter不支持switch语句的自定义枚举,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61545412/