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.

Please follow and like us:
error0
fb-share-icon
Tweet 20
fb-share-icon20