Por que o GetX é um ótimo gerenciador de estado no Flutter
Tags: getx, flutter, dart, codequality
Published: 2021-11-18 23:01:18

Bom, então bora lá!

Eu já venho há algum tempinho utilizando o Getx para gerenciamento de estado dentro do Flutter e venho me surpreendendo cada vez mais com o seu poder, e aqui eu vou passar alguns motivos do por quê estou gostando dele, bora!

###Primeiramente, vamos abordar outros gerenciamentos de estado e suas premissas.

[Provider](https://pub.dev/packages/provider) - Um wrapper em torno do [Inherited Widget](https://api.flutter.dev/flutter/widgets/InheritedWidget-class.html) para torná-los mais fáceis de usar e reutilizáveis. 

[setState](https://api.flutter.dev/flutter/widgets/State/setState.html) - A abordagem de baixo nível padrão do Flutter.

[InheritedWidget & InheritedModel](https://api.flutter.dev/flutter/widgets/InheritedModel-class.html) - A abordagem de baixo nível usada para se comunicar entre ancestrais e filhos na árvore do widget. Isso é o que o [Provider](https://pub.dev/packages/provider) e muitas outras abordagens usam por debaixo dos panos.

[Provider](https://pub.dev/packages/redux) - Uma abordagem de container de estado familiar a muitos desenvolvedores da web e deve permanecer no mundo da web! rsrsrs.

[Fish Redux](https://pub.dev/packages/fish_redux) - Fish Redux é uma estrutura de aplicativo de flutter montada baseada no gerenciamento de estado Redux. É adequado para a construção de aplicações de médio e grande porte.

[GetIt](https://pub.dev/packages/get_it) - Uma abordagem de gerenciamento de estado baseada em localizador de serviço que não precisa de um BuildContext.

[MobX](https://pub.dev/packages/mobx) - Uma biblioteca popular baseada em observáveis ​​e reações.

[BloC](https://pub.dev/packages/bloc) - Uma família de padrões baseados em fluxo / observáveis.

[RiverPod](https://pub.dev/packages/riverpod) - Uma abordagem semelhante ao [Provider](https://pub.dev/packages/provider) que é seguro para compilação e testável. Ele não depende da SDK do Flutter.

###Agora, a melhor parte, o por quê o GetX é o mais fera!

![Getão](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yauc4klvl5t6wd864qic.png)

1. Atualiza apenas os widgets necessários.

2. Não usa changeNotifier, é o gerenciador de estado que usa menos memória (perto de 0 MB).

3. Esqueça StatefulWidget! Com Get, você nunca precisará disso. Com os outros gerenciadores de estado, você provavelmente terá que usar um StatefulWidget para obter a instância de seu Provider, BLoC, MobX Controller, etc. Mas você já parou para pensar que seu appBar, seu scaffold e a maioria dos widgets que estão em sua classe são apátridas? Então, por que salvar o estado de uma classe inteira, se você só pode salvar o estado do widget que tem estado? O Get também resolve isso! Crie uma classe sem estado, torne tudo sem estado. Se você precisar atualizar um único componente, envolva-o com GetBuilder e seu estado será mantido.

4. Organize seu projeto de verdade! Os controladores não devem estar em sua UI, coloque seu TextEditController ou qualquer controlador que você use em sua classe Controller.

5. Você precisa acionar um evento para atualizar um widget assim que ele for renderizado? GetBuilder possui a propriedade “initState”, assim como StatefulWidget, e você pode chamar eventos de seu controlador, diretamente dele, sem mais eventos sendo colocados em seu initState.

6. Você precisa acionar uma ação como fechar streams, temporizadores e etc? GetBuilder também possui a propriedade dispose, onde você pode chamar eventos assim que o widget for destruído.

7. Use streams apenas se necessário. 
Você pode usar seus StreamControllers dentro de seu controlador normalmente e usar o StreamBuilder também normalmente, mas lembre-se, um fluxo consome memória razoavelmente, a programação reativa é bonita, mas você não deve abusar dela. 30 fluxos abertos simultaneamente podem ser piores do que o changeNotifier (e o changeNotifier é muito ruim).

Get é onisciente e, na maioria dos casos, sabe exatamente a hora certa para esgotar a memória de um controlador. Você não deve se preocupar com quando descartar um controlador, Get sabe o melhor momento para fazer isso.

Fechou!