Enhanced Enums - Seus enums melhorados
Tags: enums, enhanced, flutter, dart
Published: 2024-04-23 13:09:34


Enums é uma forma que posso trabalhar com valores predefinidos de forma constantes, uma vantagem disso é conseguirmos uma segurança em tempo de compilação, pois desta forma no momento que seu app estiver compilando, facilmente será identificado caso algum valor incorreto esteja sendo utilizado.

Vamos ao seguinte exemplo em que tenho uma classe **Funcionario** onde tem um método chamado **imprimirRegimeContratacao** que recebe uma String representando o tipo de contratação e me retorna uma descrição.

{% gist https://gist.github.com/toshiossada/65790aa47fc21e78eeff13abc4340352 file=main.dart %}

Isto me retornará o seguinte resultado.

![](https://cdn-images-1.medium.com/max/800/1*j2i5_phHW4NlDPDUd7T0Bg.png)

Entretanto, se ao invés de passar “**CLT**” como parâmetro eu passar “**clt**”(em minúsculo) ocorrerá um problema.

{% gist https://gist.github.com/toshiossada/903a85af097b74673aa684d49f936bdc file=main.dart %}

![](https://cdn-images-1.medium.com/max/800/1*Z90E6Q-1rSeeWr8_R4caGw.png)

O problema do código acima é que ele está muito aberto para que ele aceite qualquer tipo de informação, este é um ótimo tipo de cenário para a utilização de **ENUMERADORES**, utilizando a palavra **enum** posso facilmente criar um enumerador.

{% gist https://gist.github.com/toshiossada/d5336c73012c5d9a2e5b5c4ac2685c4e file=main.dart %}

![](https://cdn-images-1.medium.com/max/800/1*OSv4EwHPzFej9YnAgvxL0Q.png)

Desta forma eu não consigo mais passar um parâmetro inexistente, pois assim já estão predefinidos os valores que serão tratados.

Agora imagine que precisamos de um método que irá calcular o salário liquido do funcionário que irá receber o salário bruto e descontar o imposto de acordo com o tipo de contratação.
{% gist https://gist.github.com/toshiossada/e99ee17265f251971b320a66480f05da file=main.dart %}
![](https://cdn-images-1.medium.com/max/800/1*ihpxZNj4JRFiS-C5Tstjfw.png)

No dart podemos colocar o método que retorna a porcentagem de imposto dentro do enum, desta forma toda vez que for utilizar deste enum já tenho predefinido a porcentagem que ele irá pagar, pois ele é um valor constante.

Antigamente (antes do Dart 2.17 e Flutter 3.0) precisamos fazer isto através de **extensions** e com isso conseguimos criar métodos dentro de nosso **enum**.

{% gist https://gist.github.com/toshiossada/5bf590d237655ea758185d997d7677f2 file=main.dart %}

![](https://cdn-images-1.medium.com/max/800/1*2YIKzk3WgB-Ula6M1OZPKQ.png)

No Flutter 3.0 tivemos o suporte ao Dart 2.17 que nos trouxe melhorias nos enumeradores possibilitando criarmos enums mais ricos com métodos e atributos, não necessitando criar extensions.

Desta forma podemos retirar a extension e passar todos os métodos para dentro do enum

{% gist https://gist.github.com/toshiossada/7b49506ef70d1672657d0f9e9cc776d8 file=main.dart %}

![](https://cdn-images-1.medium.com/max/800/1*xsJoSzAH3gtgyQQKnrkocg.png)

Agora também podemos criar propriedades dentro do enum para pré definir valores que serão constantes (ESTAS PROPRIEDADES DEVEM SER FINAL E IREMOS PASSAR NO CONSTRUTOR)

{% gist https://gist.github.com/toshiossada/0666fe04a9a66fce81687c857271e8d9 file=main.dart %}

![](https://cdn-images-1.medium.com/max/800/1*GUKSxV-1eUZzpke7jH-qJg.png)

Também posso trabalhar com contratos no enum, para predefinir métodos dos enums que irão implementá-los
{% gist https://gist.github.com/toshiossada/0de4125c7fc393ebc63ddb7e1a0365d9 file=main.dart %}
![](https://cdn-images-1.medium.com/max/800/1*I42t5ClTPiB5fy155_3xGA.png)

Desta forma seus enumeradores ficam muito mais poderosos e muito mais legíveis, legal essa nova alteração né?

Tem vários exemplos em meu github entre, compartilhe e dê seu star em meu github :)

[https://github.com/toshiossada](https://github.com/toshiossada)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/obcg0d2y00yddve9quky.png)


Entre em nosso discord para interagir com a comunidade: https://discord.com/invite/flutterbrasil
https://linktr.ee/flutterbrasil