Melhore seu código Flutter com enums aprimorados

Tempo de leitura: < 1 minute

Olá pessoal, hoje quero compartilhar sobre a enumeração aprimorada que foi incluída no Dart 2.17.

Enums antes
Para criar enums no dart, aqui está o caminho

enum TenderStatus {
  Created,
  PreTender,
  InTender,
  Completed
}

Tem algumas limitações que não podemos adicionar métodos e variáveis como classes. Digamos que queremos imprimir representações de string dos valores enum, vamos acabar criando métodos de extensão ou outra classe para isso. Uma tarefa um pouco tediosa que adiciona complexidade extra à base de código.

extension TenderStatusExt on TenderStatus {
  String get displayName {
    switch (this) {
      case TenderStatus.Created:
        return 'Tender Created';
      case TenderStatus.PreTender:
        return 'Tender starting soon!!';
      case TenderStatus.InTender:
        return 'Tender is running';
      case TenderStatus.Completed:
        return 'Tender Completed';
    }
  }
}

 

Criando enumeração aprimorada

Em vez de criar extensões e classes auxiliares, podemos escrever todos os métodos utilitários em um só lugar. Comporte-se como uma miniclasse que pode definir membros e funções.

A criação de uma enumeração aprimorada é semelhante à criação de uma classe. Defina construtores, propriedades e métodos const conforme desejar.

enum TenderStatus {
  Created(description: 'Tender Created'),
  PreTender(description: 'Tender starting soon!!'),
  InTender(description: 'Tender is running'),
  Completed(description: 'Tender Completed');

  final String description;

  const TenderStatus({required this.description});

  static Map<TenderStatus, String> statusWithDesc() => {
        TenderStatus.Created: TenderStatus.Created.description,
        TenderStatus.PreTender: TenderStatus.PreTender.description,
        TenderStatus.InTender: TenderStatus.InTender.description,
        TenderStatus.Completed: TenderStatus.Completed.description,
      };
}

Por exemplo

final description = TenderStatus.Created.description;
final statusMap = TenderStatus.statusWithDesc();

 

Algumas coisas a serem observadas aqui

  • O construtor deve ser const e os membros devem ser finais.
  • Não é possível estender outras classes.

 

Conclusão

Enums aprimorados são um recurso poderoso do Dart que oferece muitos benefícios em relação aos enums tradicionais. Se você estiver trabalhando com enums no Flutter, considere usar enums aprimorados para tornar seu código mais poderoso e flexível.