Reputation: 13611
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?
Upvotes: 3
Views: 4011
Reputation: 6756
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.
Upvotes: 5