Showing
1 changed file
with
82 additions
and
41 deletions
1 | -<a href="https://www.buymeacoffee.com/jonataslaw" target="_blank"><img src="https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png" alt="Me compre um café" style="height: 41px !important;width: 174px !important; box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;-webkit-box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;" > </a> | ||
2 |  | 1 |  |
3 | 2 | ||
4 | -*Idiomas: [English](README.md), [Brazilian Portuguese](README.pt-br.md).* | 3 | +*Idiomas: [Inglês](README.md), Português Brasileiro (este aquivo)* |
5 | 4 | ||
6 | [](https://pub.dev/packages/get) | 5 | [](https://pub.dev/packages/get) |
7 |  | 6 |  |
@@ -10,46 +9,57 @@ | @@ -10,46 +9,57 @@ | ||
10 | <img alt="Awesome Flutter" src="https://img.shields.io/badge/Awesome-Flutter-blue.svg?longCache=true&style=flat-square" /> | 9 | <img alt="Awesome Flutter" src="https://img.shields.io/badge/Awesome-Flutter-blue.svg?longCache=true&style=flat-square" /> |
11 | </a> | 10 | </a> |
12 | 11 | ||
12 | +<a href="https://www.buymeacoffee.com/jonataslaw" target="_blank"><img src="https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png" alt="Me compre um café" style="height: 41px !important;width: 174px !important; box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;-webkit-box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;" > </a> | ||
13 | 13 | ||
14 | -Get é uma biblioteca poderosa e extra-leve para Flutter que vai te dar superpoderes e aumentar sua produtividade. Navegue sem precisar do `context`, abra `Dialog`s, `Snackbar`s ou `BottomSheet`s de qualquer lugar no código, gerencie estados e injete dependências de uma forma simples e prática! Get é seguro, estável, atualizado e oferece uma enorme gama de APIs que não estão presentes no framework padrão. | 14 | +- Get é uma biblioteca poderosa e extra-leve para Flutter. Ela combina um gerenciador de estado de alta performance, injeção de dependência inteligente e gerenciamento de rotas de uma forma rápida e prática. |
15 | +- Get não é para todos, seu foco é | ||
16 | + - **Performance**: Já que gasta o mínimo de recursos | ||
17 | + - **Produtividade**: Usando uma sintaxe fácil e agradável | ||
18 | + - **Organização**: Que permite o total desacoplamento da View e da lógica de negócio. | ||
19 | +- Get vai economizar horas de desenvolvimento, e vai extrair a performance máxima que sua aplicação pode entregar, enquanto é fácil para iniciantes e preciso para experts. | ||
20 | +- Navegue por rotas sem `context`, abra `Dialog`s, `Snackbar`s ou `BottomSheet`s de qualquer lugar no código, gerencie estados e injete dependências de uma forma simples e prática. | ||
21 | +- Get é seguro, estável, atualizado e oferece uma enorme gama de APIs que não estão presentes no framework padrão. | ||
15 | 22 | ||
16 | -```dart | ||
17 | -// Navigator padrão do Flutter | ||
18 | -Navigator.of(context).push( | ||
19 | - context, | ||
20 | - MaterialPageRoute( | ||
21 | - builder: (BuildContext context) { | ||
22 | - return Home(); | ||
23 | - }, | ||
24 | - ), | ||
25 | -); | ||
26 | - | ||
27 | -// Sintaxe do Get | ||
28 | -Get.to(Home()); | ||
29 | -``` | 23 | +**O app 'Counter' criado por padrão no com o comando `flutter create` tem mais de 100 linhas(incluindo os comentários). Para demonstrar o poder do Get, irei demonstrar como fazer o mesmo 'Counter' mudando o estado em cada toque trocando entre páginas e compartilhando o estado entre telas. Tudo de forma organizada, separando a lógica de negócio da View, COM SOMENTE 26 LINHAS INCLUINDO COMENTÁRIOS** |
30 | 24 | ||
31 | -**Exemplo completo do app Flutter counter em somente 11 linhas de código** | ||
32 | ```dart | 25 | ```dart |
33 | void main() => runApp(GetMaterialApp(home: Home())); | 26 | void main() => runApp(GetMaterialApp(home: Home())); |
27 | +// Crie sua classe de lógica de negócio e coloque todas as variáveis, métodos e controllers dentro dela | ||
28 | +class Controller extends RxController { | ||
29 | + // ".obs" transforma um objeto num Observable | ||
30 | + var count = 0.obs; | ||
31 | + increment() => count.value++; | ||
32 | +} | ||
33 | + | ||
34 | class Home extends StatelessWidget { | 34 | class Home extends StatelessWidget { |
35 | - final count = 0.obs; | 35 | + // Instancie sua classe usando Get.put() para torná-la disponível para todas as rotas subsequentes |
36 | + final Controller c = Get.put(Controller()); | ||
36 | @override | 37 | @override |
37 | Widget build(context) => Scaffold( | 38 | Widget build(context) => Scaffold( |
38 | - appBar: AppBar(title: Text("Get muda sua vida")), | ||
39 | - floatingActionButton: FloatingActionButton(onPressed: () => count.value++), | ||
40 | - body: Center(child: Obx(() => Text(count.string))), | ||
41 | - ); | 39 | + appBar: AppBar(title: Obx( |
40 | + () => Text("Total of clicks: " + c.count.string))), | ||
41 | + // Troque o Navigator.push de 8 linhas por um simples Get.to(). Você não precisa do 'context' | ||
42 | + body: Center(child: RaisedButton( | ||
43 | + child: Text("Ir pra Outra tela"), onPressed: () => Get.to(Outra()))), | ||
44 | + floatingActionButton: FloatingActionButton(child: | ||
45 | + Icon(Icons.add), onPressed: c.increment)); | ||
42 | } | 46 | } |
47 | + | ||
48 | +class Outra extends StatelessWidget { | ||
49 | + // Você pode pedir o Get para encontrar o controller que foi usado em outra página e redirecionar você pra ele. | ||
50 | + final Controller c = Get.find(); | ||
51 | + @override | ||
52 | + Widget build(context) => Scaffold(body: Center(child: Text(c.count.string))); | ||
53 | +} | ||
54 | + | ||
43 | ``` | 55 | ``` |
44 | 56 | ||
45 | -## Começando | 57 | +Esse é um projeto simples mas já deixa claro o quão poderoso o Get é. Enquanto seu projeto cresce, essa diferença se torna bem mais significante. |
46 | 58 | ||
47 | -A navegação convencional do Flutter tem uma grande quantidade de boilerplate (código que se repete demais), requer o `context` para navegar entre telas/rotas, abrir dialogs e usar snackbars no framework, e é entediante. | 59 | +Get foi feito para funcionar com times, mas torna o trabalho de um desenvolvedor individual simples. |
48 | 60 | ||
49 | -Essa biblioteca vai mudar a forma que você trabalha com o Framework e salvar seu código dos boilerplates, aumentando sua produtividade, e eliminando os bugs de reconstrução da sua aplicação. | 61 | +Melhore seus prazos, entregue tudo a tempo sem perder performance. Get não é para todos, mas se você identificar com o que foi dito acima, Get é para você! |
50 | 62 | ||
51 | -- [Começando](#começando) | ||
52 | - - [Você pode contribuir no projeto de várias formas:](#você-pode-contribuir-no-projeto-de-várias-formas) | ||
53 | - [Como usar?](#como-usar) | 63 | - [Como usar?](#como-usar) |
54 | - [Navegação sem rotas nomeadas](#navegação-sem-rotas-nomeadas) | 64 | - [Navegação sem rotas nomeadas](#navegação-sem-rotas-nomeadas) |
55 | - [SnackBars](#snackbars) | 65 | - [SnackBars](#snackbars) |
@@ -59,7 +69,8 @@ Essa biblioteca vai mudar a forma que você trabalha com o Framework e salvar se | @@ -59,7 +69,8 @@ Essa biblioteca vai mudar a forma que você trabalha com o Framework e salvar se | ||
59 | - [Uso do gerenciador de estado simples](#uso-do-gerenciador-de-estado-simples) | 69 | - [Uso do gerenciador de estado simples](#uso-do-gerenciador-de-estado-simples) |
60 | - [Sem StatefulWidget;](#sem-statefulwidget) | 70 | - [Sem StatefulWidget;](#sem-statefulwidget) |
61 | - [Formas de uso:](#formas-de-uso) | 71 | - [Formas de uso:](#formas-de-uso) |
62 | -- [Reactive State Manager - GetX](#reactive-state-manager---getx) | 72 | +- [Reactive State Manager](#reactive-state-manager) |
73 | + - [GetX vs GetBuilder vs Obx vs MixinBuilder](#getx-vs-getbuilder-vs-obx-vs-mixinbuilder) | ||
63 | - [Gerenciamento de dependências simples](#gerenciamento-de-dependências-simples) | 74 | - [Gerenciamento de dependências simples](#gerenciamento-de-dependências-simples) |
64 | - [Bindings](#bindings) | 75 | - [Bindings](#bindings) |
65 | - [Como utilizar:](#como-utilizar) | 76 | - [Como utilizar:](#como-utilizar) |
@@ -74,7 +85,7 @@ Essa biblioteca vai mudar a forma que você trabalha com o Framework e salvar se | @@ -74,7 +85,7 @@ Essa biblioteca vai mudar a forma que você trabalha com o Framework e salvar se | ||
74 | 85 | ||
75 | 86 | ||
76 | 87 | ||
77 | -#### Você pode contribuir no projeto de várias formas: | 88 | +#### Quer contribuir no projeto? Nós ficaremos orgulhosos de ressaltar você como um dos colaboradores. Aqui vai algumas formas em que você pode contribuir e fazer Get (e Flutter) ainda melhores: |
78 | - Ajudando a traduzir o README para outras linguagens. | 89 | - Ajudando a traduzir o README para outras linguagens. |
79 | - Adicionando mais documentação ao README (até o momento, nem metade das funcionalidades do Get foram documentadas). | 90 | - Adicionando mais documentação ao README (até o momento, nem metade das funcionalidades do Get foram documentadas). |
80 | - Fazendo artigos/vídeos ensinando a usar o Get (eles serão inseridos no README, e no futuro na nossa Wiki). | 91 | - Fazendo artigos/vídeos ensinando a usar o Get (eles serão inseridos no README, e no futuro na nossa Wiki). |
@@ -90,14 +101,17 @@ Qualquer contribuição é bem-vinda! | @@ -90,14 +101,17 @@ Qualquer contribuição é bem-vinda! | ||
90 | (procure pela versão mais recente em pub.dev) --> | 101 | (procure pela versão mais recente em pub.dev) --> |
91 | 102 | ||
92 | Adicione Get ao seu arquivo pubspec.yaml | 103 | Adicione Get ao seu arquivo pubspec.yaml |
93 | -<!-- de acordo com a versão do flutter que você estiver usando --> | 104 | +```yaml |
105 | +dependencies: | ||
106 | + get: | ||
107 | +``` | ||
94 | 108 | ||
95 | Troque seu `MaterialApp()` por `GetMaterialApp()` e aproveite! | 109 | Troque seu `MaterialApp()` por `GetMaterialApp()` e aproveite! |
96 | ```dart | 110 | ```dart |
97 | import 'package:get/get.dart'; | 111 | import 'package:get/get.dart'; |
98 | 112 | ||
99 | -GetMaterialApp( // Before: MaterialApp( | ||
100 | - home: MyHome(), | 113 | +GetMaterialApp( // Antes: MaterialApp( |
114 | + home: HomePage(), | ||
101 | ) | 115 | ) |
102 | ``` | 116 | ``` |
103 | 117 | ||
@@ -108,7 +122,7 @@ Para navegar para uma próxima tela: | @@ -108,7 +122,7 @@ Para navegar para uma próxima tela: | ||
108 | Get.to(ProximaTela()); | 122 | Get.to(ProximaTela()); |
109 | ``` | 123 | ``` |
110 | 124 | ||
111 | -Para retornar para a tela anterior: | 125 | +Para fechar snackbars, dialogs, bottomsheets, ou qualquer coisa que você normalmente fecharia com o `Navigator.pop(context)` (como por exemplo fechar a View atual e voltar para a anterior): |
112 | ```dart | 126 | ```dart |
113 | Get.back(); | 127 | Get.back(); |
114 | ``` | 128 | ``` |
@@ -341,7 +355,7 @@ class Controller extends GetController { | @@ -341,7 +355,7 @@ class Controller extends GetController { | ||
341 | int counter = 0; | 355 | int counter = 0; |
342 | void increment() { | 356 | void increment() { |
343 | counter++; | 357 | counter++; |
344 | - update(this); // use update(this) para atualizar a variável counter na UI quando increment for chamado | 358 | + update(); // use update() para atualizar a variável counter na UI quando increment for chamado |
345 | } | 359 | } |
346 | } | 360 | } |
347 | // Na sua classe Stateless/Stateful, use o GetBuilder para atualizar o texto quando a função increment for chamada | 361 | // Na sua classe Stateless/Stateful, use o GetBuilder para atualizar o texto quando a função increment for chamada |
@@ -391,7 +405,7 @@ class Controller extends GetController { | @@ -391,7 +405,7 @@ class Controller extends GetController { | ||
391 | int counter = 0; | 405 | int counter = 0; |
392 | void increment() { | 406 | void increment() { |
393 | counter++; | 407 | counter++; |
394 | - update(this); | 408 | + update(); |
395 | } | 409 | } |
396 | } | 410 | } |
397 | ``` | 411 | ``` |
@@ -536,12 +550,12 @@ GetBuilder<Controller>( | @@ -536,12 +550,12 @@ GetBuilder<Controller>( | ||
536 | ``` | 550 | ``` |
537 | E atualizá-los dessa forma: | 551 | E atualizá-los dessa forma: |
538 | ```dart | 552 | ```dart |
539 | -update(this,['text']); | 553 | +update(['text']); |
540 | ``` | 554 | ``` |
541 | 555 | ||
542 | Você também pode impor condições para o update acontecer: | 556 | Você também pode impor condições para o update acontecer: |
543 | ```dart | 557 | ```dart |
544 | -update(this,['text'], counter < 10); | 558 | +update(['text'], counter < 10); |
545 | ``` | 559 | ``` |
546 | 560 | ||
547 | GetX faz isso automaticamente e somente reconstrói o widget que usa a exata variável que foi alterada. Se você alterar o valor da variável para o mesmo valor que ela era anteriormente e isso não sugira uma mudança de estado, GetX não vai reconstruir esse widget, economizando memória e ciclos de CPU (Ex: 3 está sendo mostrado na tela, e você muda a variável para ter o valor 3 denovo. Na maioria dos gerenciadores de estado, isso vai causar uma reconstrução do widget, mas com o GetX o widget só vai reconstruir se de fato o estado mudou). | 561 | GetX faz isso automaticamente e somente reconstrói o widget que usa a exata variável que foi alterada. Se você alterar o valor da variável para o mesmo valor que ela era anteriormente e isso não sugira uma mudança de estado, GetX não vai reconstruir esse widget, economizando memória e ciclos de CPU (Ex: 3 está sendo mostrado na tela, e você muda a variável para ter o valor 3 denovo. Na maioria dos gerenciadores de estado, isso vai causar uma reconstrução do widget, mas com o GetX o widget só vai reconstruir se de fato o estado mudou). |
@@ -550,10 +564,10 @@ GetBuilder é focado precisamente em múltiplos controles de estados. Imagine qu | @@ -550,10 +564,10 @@ GetBuilder é focado precisamente em múltiplos controles de estados. Imagine qu | ||
550 | 564 | ||
551 | Dessa forma, se você quiser controlar individualmente, você pode assinalar ID's para isso, ou usar GetX. Isso é com você, apenas lembre-se que quando mais "widgets individuais" você tiver, mais a performance do GetX vai se sobressair. Mas o GetBuilder vai ser superior quando há multiplas mudanças de estado. | 565 | Dessa forma, se você quiser controlar individualmente, você pode assinalar ID's para isso, ou usar GetX. Isso é com você, apenas lembre-se que quando mais "widgets individuais" você tiver, mais a performance do GetX vai se sobressair. Mas o GetBuilder vai ser superior quando há multiplas mudanças de estado. |
552 | 566 | ||
553 | -Você pode usar os dois em qualquer situação, mas se quiser refinar a aplicação para a melhor performance possível, eu diria isso: se as suas variáveis são alteradas em momentos diferentes, use GetX, porque não tem competição para isso quando o widget é para reconstruir somente o que é necessário. Se você não precisa de IDs únicas, porque todas as suas variáveis serão alteradas quando você fazer uma ação, use GetBuilder, porque é um atualizador de estado em blocos simples, feito com apenas algumas linhas de código, para fazer justamente o que ele promete fazer: atualizar estado em blocos. Não há forma de comparar RAM, CPU, etc de um gerenciador de estado gigante com um simples StatefulWidget (como GetBuilder) que é atualizado quando você chama `update(this)`. Foi feito de uma forma simples, para ter o mínimo de lógica computacional, somente para cumprir um único papel e gastar o mínimo de recursos possível. | 567 | +Você pode usar os dois em qualquer situação, mas se quiser refinar a aplicação para a melhor performance possível, eu diria isso: se as suas variáveis são alteradas em momentos diferentes, use GetX, porque não tem competição para isso quando o widget é para reconstruir somente o que é necessário. Se você não precisa de IDs únicas, porque todas as suas variáveis serão alteradas quando você fazer uma ação, use GetBuilder, porque é um atualizador de estado em blocos simples, feito com apenas algumas linhas de código, para fazer justamente o que ele promete fazer: atualizar estado em blocos. Não há forma de comparar RAM, CPU, etc de um gerenciador de estado gigante com um simples StatefulWidget (como GetBuilder) que é atualizado quando você chama `update()`. Foi feito de uma forma simples, para ter o mínimo de lógica computacional, somente para cumprir um único papel e gastar o mínimo de recursos possível. |
554 | Se você quer um gerenciador de estados poderoso, você pode ir sem medo para o GetX. Ele não funciona com variáveis, mas sim fluxos. Tudo está em seus streams por baixo dos panos. Você pode usar `rxDart` em conjunto com ele, porque tudo é um stream, você pode ouvir o evento de cada "variável", porque tudo é um stream, é literalmente BLoc, só que mais fácil que MobX e sem code generators ou decorations. | 568 | Se você quer um gerenciador de estados poderoso, você pode ir sem medo para o GetX. Ele não funciona com variáveis, mas sim fluxos. Tudo está em seus streams por baixo dos panos. Você pode usar `rxDart` em conjunto com ele, porque tudo é um stream, você pode ouvir o evento de cada "variável", porque tudo é um stream, é literalmente BLoc, só que mais fácil que MobX e sem code generators ou decorations. |
555 | 569 | ||
556 | -## Reactive State Manager - GetX | 570 | +## Reactive State Manager |
557 | 571 | ||
558 | Se você quer poder, Get té dá o mais avançado gerenciador de estado que você pode ter. | 572 | Se você quer poder, Get té dá o mais avançado gerenciador de estado que você pode ter. |
559 | GetX foi construído 100% baseado em Stream, e te dá todo o poder de fogo que o BLoc te dá, com uma sintaxe mais fácil que a do MobX. | 573 | GetX foi construído 100% baseado em Stream, e te dá todo o poder de fogo que o BLoc te dá, com uma sintaxe mais fácil que a do MobX. |
@@ -686,8 +700,35 @@ Obviamente, se alguém quiser contribuir para o projeto e criar um code generato | @@ -686,8 +700,35 @@ Obviamente, se alguém quiser contribuir para o projeto e criar um code generato | ||
686 | 700 | ||
687 | Tipagem no Get usando Bindings é desnecessário. Você pode usar o widget `Obx()` em vez do GetX, e ele só recebe a função anônima que cria o widget. | 701 | Tipagem no Get usando Bindings é desnecessário. Você pode usar o widget `Obx()` em vez do GetX, e ele só recebe a função anônima que cria o widget. |
688 | 702 | ||
689 | -## Gerenciamento de dependências simples | 703 | +### GetX vs GetBuilder vs Obx vs MixinBuilder |
704 | + | ||
705 | +Em uma década de trabalho com programação eu fui capaz de aprender umas lições valiosas. | ||
706 | + | ||
707 | +Meu primeiro contato com programação reactiva foi tão "Nossa, isso é incrível" e de fato é incrível. | ||
708 | + | ||
709 | +Porém, não é ideal para todas as situações. De vez em quando tudo que você precisa é mudar o estado de duas ou três variáveis ao mesmo tempo, ou uma mudança de estado diferente, que nesses casos a programação reativa não é ruim, mas não é apropriado. | ||
710 | + | ||
711 | +Programação reativa tem um consumo de RAM maior que pode ser compensado pelo fluxo individual, que vai se encarregar que apenas o Widget necessário é reconstruído, mas criar uma lista com 80 objetos, cada um com vários streams não é uma boa ideia. Abra o `dart inspect` e cheque quando um StreamBuilder consome, e você vai entender o que eu estou tentando dizer a você. | ||
712 | + | ||
713 | +Com isso em mente, eu criar o gerenciador de estados simples. É simples, e é exatamente o que você deve exigir dele: alterar vários estados em blocos de uma forma simples, e mais econômico possível. | ||
690 | 714 | ||
715 | +GetBuilder economiza muito quando se trata de RAM, e dificilmente vai existir uma forma mais econômica de lidar com isso do que ele (pelo menos eu não consigo imaginar nenhum. Se existir, me avise). | ||
716 | + | ||
717 | +Entretando, GetBuilder ainda é um gerenciador de estados "mecânico", você precisa chamar o `update()` assim como você faria com o `notifyListeners()` do `Provider`. | ||
718 | + | ||
719 | +Há outras situações onde a programação reativa é muito interessante, e não trabalhar com ela é a mesma coisa que reinventar a roda. Com isso em mente, GetX foi criado para prover tudo que há de mais moder e avançado num gerenciado de estado. Ele atualiza somente o que é necessário quando for necessário. Se por exemplo você tiver um erro que mande 300 alterações de estado simultaneamente, GetX vai filtrar e alterar a tela somente se o estado mudar de verdade. | ||
720 | + | ||
721 | +GetX ainda é mais econômico que qualquer outro gerenciador de estados reativo, mas consome um pouco mais de RAM do que o GetBuilder. Pensando nisso e mirando em minimizar o consumo de recursos que o Obx foi criado. | ||
722 | + | ||
723 | +Ao contrário de GetX e GetBuilder, você não será capaz de inicializar o controller dentro do Obx, é só um Widget com um `StreamSubscription` que recebe eventos de mundança das childrens ou child, só isso. É mais econômico que o GetX, mas perde para o GetBuilder, que é nada mais que o esperado, já que é reativo. GetBuilder tem uma das formas mais simplística que existe, de guardar o hashcode de um Widget e seu StateSetter. Com Obs você não precisa escrever seu tipo de controller, e você pode ouvir mudanças de múltiplos controllers diferentes, mas eles precisam ser inicializados antes, tanto usando o forma demonstrada no exemplo no início desse README, ou usando a classe `Bindings` | ||
724 | + | ||
725 | +Concluindo, uma pessoa abriu um pedido para uma feature nova, como ele queria usar somente um tipo de variável reativa, e precisava inserir um Obx junto do GetBuilder para isso. Pensando nisso, `MixinBuilder` foi criado. Ele permite as duas formas de alterar estados: usando variáveis com `.obs`, ou a forma mecânica via `update()` | ||
726 | + | ||
727 | +Porém, desses 4 widgets, esse é o que consome mais recursos, já que usa os dois gerenciadores de estado combinados. | ||
728 | + | ||
729 | +- Nota: Para usar GetBuilder e MixinBuilder você precisa usar GetController. Para usar GetX ou Obx você precisa usar RxController. | ||
730 | + | ||
731 | +## Gerenciamento de dependências simples | ||
691 | * Nota: Se você está usando o gerenciado de estado do Get, você não precisa se preocupar com isso, só leia a documentação, mas dê uma atenção a api `Bindings`, que vai fazer tudo isso automaticamente para você. | 732 | * Nota: Se você está usando o gerenciado de estado do Get, você não precisa se preocupar com isso, só leia a documentação, mas dê uma atenção a api `Bindings`, que vai fazer tudo isso automaticamente para você. |
692 | 733 | ||
693 | Já está usando o Get e quer fazer seu projeto o melhor possível? Get tem um gerenciador de dependência simples e poderoso que permite você pegar a mesma classe que seu Bloc ou Controller com apenas uma linha de código, sem Provider context, sem inheritedWidget: | 734 | Já está usando o Get e quer fazer seu projeto o melhor possível? Get tem um gerenciador de dependência simples e poderoso que permite você pegar a mesma classe que seu Bloc ou Controller com apenas uma linha de código, sem Provider context, sem inheritedWidget: |
-
Please register or login to post a comment