Dominando Enums no Flutter – Uso Limpo, Escalável e de Nível Profissional
Quando comecei a escrever apps Flutter, eu usava enums como a maioria das pessoas — apenas como constantes. Mas, ao longo dos anos, percebi que os enums são mais do que apenas listas enfeitadas. Se usados corretamente, eles limpam seu código, potencializam a lógica da sua UI e escalam junto com seu aplicativo.
Aqui estão os meus truques favoritos para enums.
1. Serialização Fácil para APIs e Armazenamento
Precisa salvar valores de um enum no armazenamento local ou enviá-los pela rede? Não há necessidade de mapeamento manual ou métodos auxiliares extras — os enums do Dart possuem uma propriedade nativa chamada .name que torna isso ridiculamente simples. E com o .values.byName(), transformá-los de volta (parsing) é igualmente limpo.
enum Status { pending, approved, rejected }
// To JSON or SharedPreferences
final String saved = Status.approved.name; // "approved"
// From JSON or storage
final Status parsed = Status.values.byName(saved); // Status.approved
2. Aplique Construtores Baseados em Enum
Em vez de poluir sua interface (UI) com blocos switch ou if-else, deixe que os enums construam seus próprios widgets usando extensões (extensions). Esse padrão permite que o seu enum decida qual widget renderizar, tornando sua árvore de widgets mais limpa e muito mais fácil de manter.
enum LoaderType { shimmer,custom, circular }
extension LoaderX on LoaderType {
Widget build() => switch (this) {
LoaderType.shimmer => ShimmerLoader(),
LoaderType.custom => CustomLoader(),
LoaderType.circular => CircularProgressIndicator(),
};
}
3. Enum como uma Classe de Construção de UI
Em vez de poluir o código da sua interface com instruções switch, você pode transformar os enums em fábricas de widgets autocontidas, atribuindo a eles campos, construtores e métodos de construção (builder methods). Isso torna seus componentes de UI escaláveis, testáveis e extremamente limpos.
enum ButtonType {
primary(icon: Icons.check, color: Colors.blue),
danger(icon: Icons.warning, color: Colors.red);
final IconData icon;
final Color color;
const ButtonType({required this.icon, required this.color});
Widget build(String label, VoidCallback onPressed) {
return ElevatedButton.icon(
onPressed: onPressed,
icon: Icon(icon),
label: Text(label),
style: ElevatedButton.styleFrom(backgroundColor: color),
);
}
}
Uso.
ButtonType.danger.build("Delete", () => print("Deleted"));
Os enums não são apenas constantes — eles podem ser ferramentas poderosas que tornam seu código mais limpo, inteligente e fácil de escalar.
Você tem seus próprios truques com enums? Deixe-os nos comentários — eu adoraria aprender com os seus padrões também!
Se isso ajudou, compartilhe com seu círculo de desenvolvedores e não se esqueça de me seguir para mais dicas de Flutter como esta.