如何在Dart中编写一个枚举工厂?

3

我有这个枚举:

/// Firmware update  BLE OTA transfert speed
enum FirmwareUpdateBleOtaTransfertSpeed { fast, medium, moderate }

使用以下扩展:

extension FirmwareUpdateBleOtaTransfertSpeedExtension
    on FirmwareUpdateBleOtaTransfertSpeed {

  static FirmwareUpdateBleOtaTransfertSpeed fromSliderIndex(double value) {
    if (value > 66)
      return FirmwareUpdateBleOtaTransfertSpeed.fast;
    else if (value > 33)
      return FirmwareUpdateBleOtaTransfertSpeed.medium;
    else
      return FirmwareUpdateBleOtaTransfertSpeed.moderate;
  }
}

我希望使用我的工厂如下:

speed = FirmwareUpdateBleOtaTransfertSpeed
                        .fromSliderIndex(value);

但是它无法编译。我必须按照以下方式使用扩展名:

speed = FirmwareUpdateBleOtaTransfertSpeedExtension
                        .fromSliderIndex(value);

我该如何直接使用枚举类来生成正确的枚举值?

1个回答

4
如果您希望在枚举中调用静态方法,需要将静态方法直接定义在枚举内部,而不是在扩展中定义。
enum FirmwareUpdateBleOtaTransfertSpeed {
  fast,
  medium,
  moderate;

  static FirmwareUpdateBleOtaTransfertSpeed fromSliderIndex(double value) {
    if (value > 66)
      return FirmwareUpdateBleOtaTransfertSpeed.fast;
    else if (value > 33)
      return FirmwareUpdateBleOtaTransfertSpeed.medium;
    else
      return FirmwareUpdateBleOtaTransfertSpeed.moderate;
  }
}

你可以定义一个实际的工厂构造函数:

你可以定义一个实际的工厂构造函数:

enum FirmwareUpdateBleOtaTransfertSpeed {
  fast,
  medium,
  moderate;

  factory FirmwareUpdateBleOtaTransfertSpeed.fromSliderIndex(double value) {
    if (value > 66)
      return FirmwareUpdateBleOtaTransfertSpeed.fast;
    else if (value > 33)
      return FirmwareUpdateBleOtaTransfertSpeed.medium;
    else
      return FirmwareUpdateBleOtaTransfertSpeed.moderate;
  }
}

请注意,您需要使用 dart 2.17 或更高版本才能使用增强的枚举功能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接