Agora sim, o grande ganho do enum no Dart 2.17
Que tal usufruirmos de todas as novas possibilidades 😏

Como mencionado no artigo anterior, não era possível declarar membros nos nossos enums e de certa forma vários devs ficavam chateados(as) e magoados(as) 😤
Mas para nossa alegria, isso finalmente mudou, fique tranquilo(a), você não leu errado, melhoria implementa e issue fechada (oiá até rimou 🤪).
Vai, bora dar aquele refactor em um código que está usando uma extensions!? Eu sei que você quer, então só vamos...
- Versão que causa certa tristeza ao olhar 🥲
enum Transport { car, truck, airplane, train, boat }
extension TransportExt on Transport {
int getSpeed() {
switch (this) {
case Transport.car:
return 65;
case Transport.truck:
return 55;
case Transport.airplane:
return 600;
case Transport.train:
return 70;
case Transport.boat:
return 22;
}
}
}
Fique tranquilo, você ainda pode fazer assim 😮💨
- Versão que causa alegria ao olhar 😆
enum Transport {
car(65),
truck(55),
airplane(600),
train(70),
boat(22);
final int _speed;
const Transport(this._speed);
int getSpeed() => _speed;
}
Como algo "simples" pode deixar tanto(a) dev feliz não é mesmo 💁🏽♀️
Ei, calma que só melhora, há mais coisas que vão te dar uma "explosão" de felicidade 🥳
- Use com
generics:
enum Transport<T extends num> {
car<int>(65),
truck<int>(55),
airplane<double>(600.50),
train<num>(70.25),
boat(22); // A inferência do tipo também funciona ;)
final T _speed;
const Transport(this._speed);
T getSpeed() => _speed;
}
- Adicione
mixinse implementeinterfaces:
mixin Speedometer {
// int speed = 0; Se usado no enum, deve ser final
int get maxSpeed;
}
abstract class Validation {
bool isValidSpeed(int speed);
}
enum Transport with Speedometer implements Validation {
...
const Transport(this.maxSpeed);
@override
final int maxSpeed;
@override
bool isValidSpeed(int speed) => speed <= maxSpeed;
}
- Faça
Factory constructors:
enum Transport {
...
const Transport(this.speed);
factory Transport.faster() => Transport.airplane;
factory Transport.slower() => Transport.boat;
}
Só não se esqueça, o enum continua sendo uma constante, você não pode estender dele, sobrescrever o index, hashCode, o operador == e nem se quer pensar em declarar um membro chamado values 😉
Sobre essa melhoria, deixo a seguinte frase do qual não sei o seu autor(a):
"Não existe começo perfeito, a evolução é um processo."
Reflitamos 🤔
Se chegou até aqui, não fique acanhado(a), deixe aquele like, compartilha com os(as) devs e me segue nas redes sociais 🍻
Esqueci ou errei algo? Não hesite e me avise 🤗
