Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to write an enum factory in dart?

I have this enum:

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

With the following extension:

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;
  }
}

And I'd like to use my factory as follows:

speed = FirmwareUpdateBleOtaTransfertSpeed
                        .fromSliderIndex(value);

But it does not compile. I must use the name of the extension as follows:

speed = FirmwareUpdateBleOtaTransfertSpeedExtension
                        .fromSliderIndex(value);

How can I use the enum class directly to generate the right enum?

like image 800
Stéphane de Luca Avatar asked Dec 18 '25 15:12

Stéphane de Luca


1 Answers

If you want the static method to be called on your enum, you need to define the static method directly inside the enum itself rather than in an extension.

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;
  }
}

You can also define as an actual factory constructor:

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;
  }
}

Note that you have to use dart 2.17 or higher in order to use the enhanced enums feature.

like image 125
mmcdon20 Avatar answered Dec 20 '25 06:12

mmcdon20



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!