Dominando Enums no Flutter – Uso Limpo, Escalável e de Nível Profissional
Quando comecei a escrever aplicativos em 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 sofisticadas. Quando usados corretamente, eles limpam seu código, potencializam a lógica da sua UI e escalam junto com seu aplicativo [6].
Aqui estão meus truques (hacks) favoritos com enums.
1. Serialização Fácil para APIs e Armazenamento.
Precisa salvar valores de 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 .name que torna isso ridiculamente simples. E com .values.byName(), fazer a conversão 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 Builders Baseados em Enums.
Em vez de poluir sua UI com blocos switch ou if-else, deixe os enums construírem seus próprios widgets usando extensões (extensions). Esse padrão permite que seu enum decida qual widget renderizar, tornando sua árvore de widgets mais limpa e 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 Construtora de UI.
Em vez de poluir seu código de UI com declarações switch, você pode transformar 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 super 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"));
Enums não são apenas constantes — eles podem ser uma ferramenta poderosa que torna seu código mais limpo, mais inteligente e mais fácil de escalar.
Tem seus próprios truques com enums? Deixe-os nos comentários — eu adoraria aprender com 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.