Showing
6 changed files
with
174 additions
and
21 deletions
@@ -24,6 +24,7 @@ | @@ -24,6 +24,7 @@ | ||
24 | - [Otras API avanzadas y configuraciones manuales](#otras-api-avanzadas-y-configuraciones-manuales) | 24 | - [Otras API avanzadas y configuraciones manuales](#otras-api-avanzadas-y-configuraciones-manuales) |
25 | - [Configuraciones globales opcionales](#configuraciones-globales-opcionales) | 25 | - [Configuraciones globales opcionales](#configuraciones-globales-opcionales) |
26 | - [Rompiendo cambios desde 2.0](#rompiendo-cambios-desde-20) | 26 | - [Rompiendo cambios desde 2.0](#rompiendo-cambios-desde-20) |
27 | +- [¿Por qué Getx](#por-qué-getx) | ||
27 | 28 | ||
28 | # Sobre GetX | 29 | # Sobre GetX |
29 | 30 | ||
@@ -64,7 +65,9 @@ El proyecto "contador" creado por defecto en un nuevo proyecto en Flutter tiene | @@ -64,7 +65,9 @@ El proyecto "contador" creado por defecto en un nuevo proyecto en Flutter tiene | ||
64 | void main() => runApp(GetMaterialApp(home: Home())); | 65 | void main() => runApp(GetMaterialApp(home: Home())); |
65 | ``` | 66 | ``` |
66 | 67 | ||
67 | -Nota: esto no modifica el MaterialApp del Flutter, GetMaterialApp no es una MaterialApp modificado, es solo un Widget preconfigurado, que tiene como child un MaterialApp por defecto. Puede configurar esto manualmente, pero definitivamente no es necesario. GetMaterialApp creará rutas, las inyectará, inyectará traducciones, inyectará todo lo que necesita para la navegación de rutas. Si usa Get solo para la gestión de estado o dependencias, no es necesario usar GetMaterialApp. GetMaterialApp es necesario para rutas, snackbars, internacionalización, bottomSheets, diálogos y APIs de alto nivel relacionadas con rutas y ausencia de contexto. | 68 | +**Nota**: esto no modifica el MaterialApp del Flutter, GetMaterialApp no es una MaterialApp modificado, es solo un Widget preconfigurado, que tiene como child un MaterialApp por defecto. Puede configurar esto manualmente, pero definitivamente no es necesario. GetMaterialApp creará rutas, las inyectará, inyectará traducciones, inyectará todo lo que necesita para la navegación de rutas. Si usa Get solo para la gestión de estado o dependencias, no es necesario usar GetMaterialApp. GetMaterialApp es necesario para rutas, snackbars, internacionalización, bottomSheets, diálogos y APIs de alto nivel relacionadas con rutas y ausencia de contexto. |
69 | + | ||
70 | +**Note²:** This step in only necessary if you gonna use route management (`Get.to()`, `Get.back()` and so on). If you not gonna use it then it is not necessary to do step 1 | ||
68 | 71 | ||
69 | - Paso 2: | 72 | - Paso 2: |
70 | Cree su clase con la lógica de negocio colocando todas las variables, métodos y controladores dentro de ella. Puede hacer que cualquier variable sea observable usando un simple ".obs". | 73 | Cree su clase con la lógica de negocio colocando todas las variables, métodos y controladores dentro de ella. Puede hacer que cualquier variable sea observable usando un simple ".obs". |
@@ -426,7 +429,8 @@ GetMaterialApp( | @@ -426,7 +429,8 @@ GetMaterialApp( | ||
426 | ] | 429 | ] |
427 | ) | 430 | ) |
428 | ``` | 431 | ``` |
429 | -# ¿Por qué Getx? | 432 | + |
433 | +# ¿Por qué Getx | ||
430 | 434 | ||
431 | 1- Después de una actualización de Flutter, muchos paquetes suelen romperse. A veces se producen errores de compilación, errores de los que aún no hay respuestas y el desarrollador necesita saber el origen del error, poder rastrearlo, y solo entonces intentar abrir un issue en el repositorio correspondiente, para finalmente ver su problema resuelto. Getx centraliza los principales recursos para el desarrollo (gestión de estado, dependencia y rutas), lo que le permite agregar un único paquete a su pubspec y comenzar a trabajar. Después de una actualización de Flutter, lo único que debe hacer es actualizar la dependencia Get y ponerse a trabajar. Get también resuelve problemas de compatibilidad. ¿Cuántas veces una versión de un paquete no es compatible con la versión de otro, porque una usa una dependencia en una versión y la otra en otra? Tampoco es una preocupación usando Get, ya que todo estará en el mismo paquete y será totalmente compatible. | 435 | 1- Después de una actualización de Flutter, muchos paquetes suelen romperse. A veces se producen errores de compilación, errores de los que aún no hay respuestas y el desarrollador necesita saber el origen del error, poder rastrearlo, y solo entonces intentar abrir un issue en el repositorio correspondiente, para finalmente ver su problema resuelto. Getx centraliza los principales recursos para el desarrollo (gestión de estado, dependencia y rutas), lo que le permite agregar un único paquete a su pubspec y comenzar a trabajar. Después de una actualización de Flutter, lo único que debe hacer es actualizar la dependencia Get y ponerse a trabajar. Get también resuelve problemas de compatibilidad. ¿Cuántas veces una versión de un paquete no es compatible con la versión de otro, porque una usa una dependencia en una versión y la otra en otra? Tampoco es una preocupación usando Get, ya que todo estará en el mismo paquete y será totalmente compatible. |
432 | 436 |
@@ -70,8 +70,8 @@ Add "Get" before your materialApp, turning it into GetMaterialApp | @@ -70,8 +70,8 @@ Add "Get" before your materialApp, turning it into GetMaterialApp | ||
70 | void main() => runApp(GetMaterialApp(home: Home())); | 70 | void main() => runApp(GetMaterialApp(home: Home())); |
71 | ``` | 71 | ``` |
72 | 72 | ||
73 | -- Note: This step in only necessary if you gonna use route management (`Get.to()`, `Get.back()` and so on). If you not gonna use it then it is not necessary to do step 1 | ||
74 | -- Note²: this does not modify the MaterialApp of the Flutter, GetMaterialApp is not a modified MaterialApp, it is just a pre-configured Widget, which has the default MaterialApp as a child. You can configure this manually, but it is definitely not necessary. GetMaterialApp will create routes, inject them, inject translations, inject everything you need for route navigation. If you use Get only for state management or dependency management, it is not necessary to use GetMaterialApp. GetMaterialApp is necessary for routes, snackbars, internationalization, bottomSheets, dialogs, and high-level apis related to routes and absence of context. | 73 | +- Note: this does not modify the MaterialApp of the Flutter, GetMaterialApp is not a modified MaterialApp, it is just a pre-configured Widget, which has the default MaterialApp as a child. You can configure this manually, but it is definitely not necessary. GetMaterialApp will create routes, inject them, inject translations, inject everything you need for route navigation. If you use Get only for state management or dependency management, it is not necessary to use GetMaterialApp. GetMaterialApp is necessary for routes, snackbars, internationalization, bottomSheets, dialogs, and high-level apis related to routes and absence of context. |
74 | +- Note²: This step in only necessary if you gonna use route management (`Get.to()`, `Get.back()` and so on). If you not gonna use it then it is not necessary to do step 1 | ||
75 | 75 | ||
76 | - Step 2: | 76 | - Step 2: |
77 | Create your business logic class and place all variables, methods and controllers inside it. | 77 | Create your business logic class and place all variables, methods and controllers inside it. |
@@ -177,17 +177,19 @@ Noticed that you didn't had to use context to do any of these things? That's one | @@ -177,17 +177,19 @@ Noticed that you didn't had to use context to do any of these things? That's one | ||
177 | 177 | ||
178 | See a more in-depth explanation of dependency management [here](./docs/en_US/dependency_management.md) | 178 | See a more in-depth explanation of dependency management [here](./docs/en_US/dependency_management.md) |
179 | 179 | ||
180 | -- Note: If you are using Get's State Manager, you don't have to worry about that, just read for information, but pay more attention to the bindings api, which will do all of this automatically for you. | ||
181 | - | ||
182 | -Are you already using Get and want to make your project as lean as possible? Get has a simple and powerful dependency manager that allows you to retrieve the same class as your Bloc or Controller with just 1 lines of code, no Provider context, no inheritedWidget: | 180 | +Get has a simple and powerful dependency manager that allows you to retrieve the same class as your Bloc or Controller with just 1 lines of code, no Provider context, no inheritedWidget: |
183 | 181 | ||
184 | ```dart | 182 | ```dart |
185 | Controller controller = Get.put(Controller()); // Rather Controller controller = Controller(); | 183 | Controller controller = Get.put(Controller()); // Rather Controller controller = Controller(); |
186 | ``` | 184 | ``` |
187 | 185 | ||
186 | +- Note: If you are using Get's State Manager, pay more attention to the bindings api, which will make easier to connect your view to your controller. | ||
187 | + | ||
188 | Instead of instantiating your class within the class you are using, you are instantiating it within the Get instance, which will make it available throughout your App. | 188 | Instead of instantiating your class within the class you are using, you are instantiating it within the Get instance, which will make it available throughout your App. |
189 | So you can use your controller (or class Bloc) normally | 189 | So you can use your controller (or class Bloc) normally |
190 | 190 | ||
191 | +**Tip:** Get dependency management is decloupled from other parts of the package, so if for example your app is already using a state manager (any one, it doesn't matter), you don't need to rewrite it all, you can use this dependency injection with no problems at all | ||
192 | + | ||
191 | ```dart | 193 | ```dart |
192 | controller.fetchApi(); | 194 | controller.fetchApi(); |
193 | ``` | 195 | ``` |
@@ -458,7 +460,7 @@ GetMaterialApp( | @@ -458,7 +460,7 @@ GetMaterialApp( | ||
458 | ) | 460 | ) |
459 | ``` | 461 | ``` |
460 | 462 | ||
461 | -# Why Getx? | 463 | +# Why Getx |
462 | 464 | ||
463 | 1- Many times after a Flutter update, many of your packages will break. Sometimes compilation errors happen, errors often appear that there are still no answers about, and the developer needs to know where the error came from, track the error, only then try to open an issue in the corresponding repository, and see its problem solved. Get centralizes the main resources for development (State, dependency and route management), allowing you to add a single package to your pubspec, and start working. After a Flutter update, the only thing you need to do is update the Get dependency, and get to work. Get also resolves compatibility issues. How many times a version of a package is not compatible with the version of another, because one uses a dependency in one version, and the other in another version? This is also not a concern using Get, as everything is in the same package and is fully compatible. | 465 | 1- Many times after a Flutter update, many of your packages will break. Sometimes compilation errors happen, errors often appear that there are still no answers about, and the developer needs to know where the error came from, track the error, only then try to open an issue in the corresponding repository, and see its problem solved. Get centralizes the main resources for development (State, dependency and route management), allowing you to add a single package to your pubspec, and start working. After a Flutter update, the only thing you need to do is update the Get dependency, and get to work. Get also resolves compatibility issues. How many times a version of a package is not compatible with the version of another, because one uses a dependency in one version, and the other in another version? This is also not a concern using Get, as everything is in the same package and is fully compatible. |
464 | 466 |
@@ -30,7 +30,7 @@ | @@ -30,7 +30,7 @@ | ||
30 | - [RxController e GetBuilder se uniram](#rxcontroller-e-getbuilder-se-uniram) | 30 | - [RxController e GetBuilder se uniram](#rxcontroller-e-getbuilder-se-uniram) |
31 | - [Rotas nomeadas](#rotas-nomeadas) | 31 | - [Rotas nomeadas](#rotas-nomeadas) |
32 | - [Porque essa mudança](#porque-essa-mudança) | 32 | - [Porque essa mudança](#porque-essa-mudança) |
33 | -- [Porque eu fiz esse package](#porque-eu-fiz-esse-package) | 33 | +- [Por que GetX](#por-que-getx) |
34 | 34 | ||
35 | # Sobre Get | 35 | # Sobre Get |
36 | 36 | ||
@@ -42,7 +42,7 @@ | @@ -42,7 +42,7 @@ | ||
42 | - 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. | 42 | - 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. |
43 | - 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. | 43 | - 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. |
44 | - Get é seguro, estável, atualizado e oferece uma enorme gama de APIs que não estão presentes no framework padrão. | 44 | - Get é seguro, estável, atualizado e oferece uma enorme gama de APIs que não estão presentes no framework padrão. |
45 | -- GetX não é um `bloc` da vida. Ele tem uma variedade de recursos que te permite começar a programar sem se preocupar com nada, mas cada um desses recursos estão em um container separado, ou seja, nenhuma depende da outra para funcionar. Elas só são inicializadas após o uso. Se você usa apenas o gerenciador de estado, apenas ele será compilado. Teste você mesmo, vá no repositório de benchmark do getX e perceberá: usando somente o gerenciador de estado do Get, a aplicação ficou mais leve do que outros projetos que também estão usando só o gerenciador de estado, porque nada que não seja usado será compilado no seu código, e cada recuro do GetX foi feito para ser muito leve. O mérito vem também do AOT do próprio Flutter que é incrível, e consegue eliminar recursos não utilizados de uma forma que nenhum outro framework consegue. | 45 | +- GetX é desacoplado. Ele tem uma variedade de recursos que te permite começar a programar sem se preocupar com nada, mas cada um desses recursos estão em um container separado, ou seja, nenhuma depende da outra para funcionar. Elas só são inicializadas após o uso. Se você usa apenas o gerenciador de estado, apenas ele será compilado. Teste você mesmo, vá no repositório de benchmark do getX e perceberá: usando somente o gerenciador de estado do Get, a aplicação ficou mais leve do que outros projetos que também estão usando só o gerenciador de estado, porque nada que não seja usado será compilado no seu código, e cada recuro do GetX foi feito para ser muito leve. O mérito vem também do AOT do próprio Flutter que é incrível, e consegue eliminar recursos não utilizados de uma forma que nenhum outro framework consegue. |
46 | 46 | ||
47 | **GetX faz seu desenvolvimento mais produtivo, mas quer deixá-lo mais produtivo ainda? Adicione a extensão [GetX extension](https://marketplace.visualstudio.com/items?itemName=get-snippets.get-snippets) no seu VSCode**. Não disponível para outras IDEs por enquanto. | 47 | **GetX faz seu desenvolvimento mais produtivo, mas quer deixá-lo mais produtivo ainda? Adicione a extensão [GetX extension](https://marketplace.visualstudio.com/items?itemName=get-snippets.get-snippets) no seu VSCode**. Não disponível para outras IDEs por enquanto. |
48 | 48 | ||
@@ -75,9 +75,9 @@ import 'package:get/get.dart'; | @@ -75,9 +75,9 @@ import 'package:get/get.dart'; | ||
75 | 75 | ||
76 | ## Gerenciamento de estado | 76 | ## Gerenciamento de estado |
77 | 77 | ||
78 | -Veja uma explicação mais completa do gerenciamento de estado [aqui](./docs/pt_BR/route_management.md) | 78 | +**Veja uma explicação mais completa do gerenciamento de estado [aqui](./docs/pt_BR/route_management.md)** |
79 | 79 | ||
80 | -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 | 80 | +O app 'Counter' criado por padrão no flutter 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 |
81 | 81 | ||
82 | - Passo 1: | 82 | - Passo 1: |
83 | Troque `MaterialApp` para `GetMaterialApp` | 83 | Troque `MaterialApp` para `GetMaterialApp` |
@@ -91,6 +91,7 @@ void main() => runApp(GetMaterialApp(home: Home())); | @@ -91,6 +91,7 @@ void main() => runApp(GetMaterialApp(home: Home())); | ||
91 | - Snackbars/bottomsheets/dialogs | 91 | - Snackbars/bottomsheets/dialogs |
92 | - apis relacionadas a rotas e a ausência de `context` | 92 | - apis relacionadas a rotas e a ausência de `context` |
93 | - Internacionalização | 93 | - Internacionalização |
94 | +- **Obs²:** Esse passo só é necessário se você for usar o gerenciamento de rotas (`Get,to()`, `Get.back()` e assim por diante), Se você não vai usar isso então não é necessário seguir o passo 1 | ||
94 | 95 | ||
95 | - Passo 2: | 96 | - Passo 2: |
96 | Cria a sua classe de regra de negócio e coloque todas as variáveis, métodos e controllers dentro dela. | 97 | Cria a sua classe de regra de negócio e coloque todas as variáveis, métodos e controllers dentro dela. |
@@ -476,14 +477,13 @@ GetMaterialApp( | @@ -476,14 +477,13 @@ GetMaterialApp( | ||
476 | ) | 477 | ) |
477 | ``` | 478 | ``` |
478 | 479 | ||
479 | -# Por que GetX? | 480 | +# Por que GetX |
480 | 481 | ||
481 | -1- Muitas vezes após uma atualização do Flutter, muitos dos seus packages irão quebrar. As vezes acontecem erros de compilação, muitas vezes aparecem erros que ainda não existem respostas sobre, e o desenvolvedor necessita saber de onde o erro veio, rastrear o erro, para só então tentar abrir uma issue no repositório correspondente, e ver seu problema resolvido. Get centraliza os principais recursos para o desenvolvimento (Gerencia de estado, de dependencias e de rotas), permitindo você adicionar um único package em seu pubspec, e começar a trabalhar. Após uma atualização do Flutter, a única coisa que você precisa fazer é atualizar a dependencia do Get, e começar a trabalhar. Get também resolve problemas de compatibilidade. Quantas vezes uma versão de um package não é compatível com a versão de outro, porque um utiliza uma dependencia em uma versão, e o outro em outra versão? Essa também não é uma preocupação usando Get, já que tudo está no mesmo package e é totalmente compatível. | 482 | +1- Muitas vezes após uma atualização do Flutter, muitos dos seus packages irão quebrar. As vezes acontecem erros de compilação, muitas vezes aparecem erros que ainda não existem respostas sobre, e o desenvolvedor necessita saber de onde o erro veio, rastrear o erro, para só então tentar abrir uma issue no repositório correspondente, e ver seu problema resolvido. Get centraliza os principais recursos para o desenvolvimento (Gerencia de estado, de dependencias e de rotas), permitindo você adicionar um único package em seu pubspec, e começar a trabalhar. Após uma atualização do Flutter, a única coisa que você precisa fazer é atualizar a dependencia do Get, e começar a trabalhar. Get também resolve problemas de compatibilidade. Quantas vezes uma versão de um package não é compatível com a versão de outro, porque um utiliza uma dependencia em uma versão, e o outro em outra versão? Essa também não é uma preocupação usando Get, já que tudo está no mesmo package e é totalmente compatível. |
482 | 483 | ||
483 | -2- Flutter é fácil, Flutter é incrível, mas Flutter ainda tem algum boilerplate que pode ser indesejado para maioria dos desenvolvedores, como o Navigator.of(context).push(context, builder[...]. Get simplifica o desenvolvimento. Em vez de escrever 8 linhas de código para apenas chamar uma rota, você pode simplesmente fazer: Get.to(Home()) e pronto, você irá para a próxima página. Urls dinamicas da web é algo realmente doloroso de fazer com o Flutter atualmente, e isso com o GetX é estupidamente simples. Gerenciar estados no Flutter, e gerenciar dependencias também é algo que gera muita discussão, por haver centenas de padrões na pub. Mas não há nada que seja tão fácil quanto adicionar um ".obs" no final de sua variável, e colocar o seu widget dentro de um Obx, e pronto, todas atualizações daquela variável será automaticamente atualizado na tela. | 484 | +2- Flutter é fácil, Flutter é incrível, mas Flutter ainda tem algum boilerplate que pode ser indesejado para maioria dos desenvolvedores, como o Navigator.of(context).push(context, builder[...]. Get simplifica o desenvolvimento. Em vez de escrever 8 linhas de código para apenas chamar uma rota, você pode simplesmente fazer: Get.to(Home()) e pronto, você irá para a próxima página. Urls dinamicas da web é algo realmente doloroso de fazer com o Flutter atualmente, e isso com o GetX é estupidamente simples. Gerenciar estados no Flutter, e gerenciar dependencias também é algo que gera muita discussão, por haver centenas de padrões na pub. Mas não há nada que seja tão fácil quanto adicionar um ".obs" no final de sua variável, e colocar o seu widget dentro de um Obx, e pronto, todas atualizações daquela variável será automaticamente atualizado na tela. |
484 | 485 | ||
485 | -3- Facilidade sem se preocupar com desempenho. O desempenho do Flutter já é incrível, mas imagine que você use um gerenciador de estados, e um locator para distribuir suas classes blocs/stores/controllers/ etc. Você deverá chamar manualmente a exclusão daquela dependencia quando não precisar dela. Mas já pensou em simplesmente usar seu controlador, e quando ele não tivesse mais sendo usado por ninguém, ele simplesmente fosse excluído da memória? É isso que GetX faz. Com o SmartManagement, tudo que não está sendo usado é excluído da memória, e você não deve se preocupar em nada além de programar. Você terá garantia que está consumindo o mínimo de recursos necessários, sem ao menos ter criado uma lógica para isso. | 486 | +3- Facilidade sem se preocupar com desempenho. O desempenho do Flutter já é incrível, mas imagine que você use um gerenciador de estados, e um locator para distribuir suas classes blocs/stores/controllers/ etc. Você deverá chamar manualmente a exclusão daquela dependencia quando não precisar dela. Mas já pensou em simplesmente usar seu controlador, e quando ele não tivesse mais sendo usado por ninguém, ele simplesmente fosse excluído da memória? É isso que GetX faz. Com o SmartManagement, tudo que não está sendo usado é excluído da memória, e você não deve se preocupar em nada além de programar. Você terá garantia que está consumindo o mínimo de recursos necessários, sem ao menos ter criado uma lógica para isso. |
486 | 487 | ||
487 | -4- Desacoplamento real. Você já deve ter ouvido o conceito "separar a view da lógica de negócios". Isso não é uma peculiaridade do BLoC, MVC, MVVM, e qualquer outro padrão existente no mercado tem esse conceito. No entanto, muitas vezes esse conceito pode ser mitigado no Flutter por conta do uso do context. | 488 | +4- Desacoplamento real. Você já deve ter ouvido o conceito "separar a view da lógica de negócios". Isso não é uma peculiaridade do BLoC, MVC, MVVM, e qualquer outro padrão existente no mercado tem esse conceito. No entanto, muitas vezes esse conceito pode ser mitigado no Flutter por conta do uso do context. |
488 | Se você precisa de context para localizar um InheritedWidget, você precisa disso na view, ou passar o context por parametro. Eu particularmente acho essa solução muito feia, e para trabalhar em equipes teremos sempre uma dependencia da lógica de negócios da View. Getx é pouco ortodoxo com a abordagem padrão, e apesar de não proibir totalmente o uso de StatefulWidgets, InitState, e etc, ele tem sempre uma abordagem similar que pode ser mais limpa. Os controllers tem ciclos de vida, e quando você precisa fazer uma solicitação APIREST por exemplo, você não depende de nada da view. Você pode usar onInit para iniciar a chamada http, e quando os dados chegarem, as variáveis serão preenchidas. Como GetX é totalmente reativo (de verdade, e trabalha sob streams), assim que os itens forem preenchidos, automaticamente será atualizado na view todos os widgets que usam aquela variável. Isso permite que as pessoas especialistas em UI trabalhem apenas com widgets, e não precisem enviar nada para a lógica de negócio além de eventos do usuário (como clicar em um botão), enquanto as pessoas que trabalham com a lógica de negócios ficarão livres para criar e testar a lógica de negócios separadamente. | 489 | Se você precisa de context para localizar um InheritedWidget, você precisa disso na view, ou passar o context por parametro. Eu particularmente acho essa solução muito feia, e para trabalhar em equipes teremos sempre uma dependencia da lógica de negócios da View. Getx é pouco ortodoxo com a abordagem padrão, e apesar de não proibir totalmente o uso de StatefulWidgets, InitState, e etc, ele tem sempre uma abordagem similar que pode ser mais limpa. Os controllers tem ciclos de vida, e quando você precisa fazer uma solicitação APIREST por exemplo, você não depende de nada da view. Você pode usar onInit para iniciar a chamada http, e quando os dados chegarem, as variáveis serão preenchidas. Como GetX é totalmente reativo (de verdade, e trabalha sob streams), assim que os itens forem preenchidos, automaticamente será atualizado na view todos os widgets que usam aquela variável. Isso permite que as pessoas especialistas em UI trabalhem apenas com widgets, e não precisem enviar nada para a lógica de negócio além de eventos do usuário (como clicar em um botão), enquanto as pessoas que trabalham com a lógica de negócios ficarão livres para criar e testar a lógica de negócios separadamente. |
489 | - |
@@ -62,6 +62,79 @@ Para eliminar una instancia de GetX: | @@ -62,6 +62,79 @@ Para eliminar una instancia de GetX: | ||
62 | Get.delete<Controller>(); | 62 | Get.delete<Controller>(); |
63 | ``` | 63 | ``` |
64 | 64 | ||
65 | +## Options | ||
66 | + | ||
67 | +When you use Get.put, lazyPut and putAsync you will have some options that you can change if you want | ||
68 | + | ||
69 | +- On Get.put(): | ||
70 | + | ||
71 | +```dart | ||
72 | +Get.put<S>( | ||
73 | + // mandatory: the class that you want to get to save, like a controller or anything | ||
74 | + // note: that "S" means that it can be anything | ||
75 | + S dependency | ||
76 | + | ||
77 | + // optional: this is for when you want multiple classess that are of the same type | ||
78 | + // since you normally get a class by using Get.find<Controller>(), | ||
79 | + // you need to use tag to tell which instance you need | ||
80 | + // must be unique string | ||
81 | + String tag, | ||
82 | + | ||
83 | + // optional: by default, get will dispose instances after they are not used anymore (example, | ||
84 | + // the controller of a view that is closed), but you might need that the instance | ||
85 | + // to be kept there throughout the entire app, like an instance of sharedPreferences or something | ||
86 | + // so you use this | ||
87 | + // defaults to false | ||
88 | + bool permanent = false, | ||
89 | + | ||
90 | + // optional: allows you after using an abstract class in a test, replace it with another one and follow the test. | ||
91 | + // defaults to false | ||
92 | + bool overrideAbstract = false, | ||
93 | + | ||
94 | + // optional: allows you to create the dependency using function instead of the dependency itself. | ||
95 | + FcBuilderFunc<S> builder, | ||
96 | +) | ||
97 | +``` | ||
98 | + | ||
99 | +- On Get.lazyPut: | ||
100 | + | ||
101 | +```dart | ||
102 | +Get.lazyPut<S>( | ||
103 | + // mandatory: a method that will be executed when your class is called for the first time | ||
104 | + // Example: Get.lazyPut<Controller>( () => Controller() ) | ||
105 | + FcBuilderFunc builder, | ||
106 | + | ||
107 | + // optional: same as Get.put(), it is used for when you want multiple different instance of a same class | ||
108 | + // must be unique | ||
109 | + String tag, | ||
110 | + | ||
111 | + // optional: It is similar to "permanent", the difference is that the instance is discarded when | ||
112 | + // is not being used, but when it's use is needed again, Get will recreate the instance | ||
113 | + // just the same as "SmartManagement.keepFactory" in the bindings api | ||
114 | + // defaults to false | ||
115 | + bool fenix = false | ||
116 | + | ||
117 | +) | ||
118 | +``` | ||
119 | + | ||
120 | +- On Get.putAsync: | ||
121 | + | ||
122 | +```dart | ||
123 | +Get.putAsync<S>( | ||
124 | + | ||
125 | + // mandatory: an async method that will be executed to instantiate your class | ||
126 | + // Example: Get.putAsync<YourAsyncClass>( () async => await YourAsyncClass() ) | ||
127 | + FcBuilderFuncAsync<S> builder, | ||
128 | + | ||
129 | + // optional: same as Get.put(), it is used for when you want multiple different instance of a same class | ||
130 | + // must be unique | ||
131 | + String tag, | ||
132 | + | ||
133 | + // optional: same as in Get.put(), used when you need to maintain that instance alive in the entire app | ||
134 | + // defaults to false | ||
135 | + bool permanent = false | ||
136 | +``` | ||
137 | + | ||
65 | ## Bindings | 138 | ## Bindings |
66 | 139 | ||
67 | Una de las grandes diferencias de este paquete, tal vez, es la posibilidad de una integración completa de las rutas, gestor de estado y dependencias. | 140 | Una de las grandes diferencias de este paquete, tal vez, es la posibilidad de una integración completa de las rutas, gestor de estado y dependencias. |
1 | +# Gerenciamento de dependência | ||
1 | 2 | ||
2 | ## Gerenciamento de dependências simples | 3 | ## Gerenciamento de dependências simples |
3 | 4 | ||
4 | -* 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ê. | ||
5 | - | ||
6 | 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: | 5 | 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: |
7 | 6 | ||
8 | ```dart | 7 | ```dart |
9 | Controller controller = Get.put(Controller()); // Em vez de Controller controller = Controller(); | 8 | Controller controller = Get.put(Controller()); // Em vez de Controller controller = Controller(); |
10 | ``` | 9 | ``` |
11 | 10 | ||
11 | +* 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ê. | ||
12 | + | ||
12 | Em vez de instanciar sua classe dentro da classe que você está usando, você está instanciando ele dentro da instância do Get, que vai fazer ele ficar disponível por todo o App | 13 | Em vez de instanciar sua classe dentro da classe que você está usando, você está instanciando ele dentro da instância do Get, que vai fazer ele ficar disponível por todo o App |
13 | 14 | ||
14 | Para que então você possa usar seu controller (ou uma classe Bloc) normalmente | 15 | Para que então você possa usar seu controller (ou uma classe Bloc) normalmente |
15 | 16 | ||
17 | +**Tip:** O gerenciamento de dependência do get é desaclpado de outras partes do package, então se por exemplo seu aplicativo já está usando um outro gerenciador de estado (qualquer um, não importa), você não precisa de reescrever tudo, pode simplesmente usar só a injeção de dependência sem problemas | ||
18 | + | ||
16 | ```dart | 19 | ```dart |
17 | controller.fetchApi(); | 20 | controller.fetchApi(); |
18 | ``` | 21 | ``` |
@@ -62,6 +65,78 @@ Para remover a instância do Get: | @@ -62,6 +65,78 @@ Para remover a instância do Get: | ||
62 | Get.delete<Controller>(); | 65 | Get.delete<Controller>(); |
63 | ``` | 66 | ``` |
64 | 67 | ||
68 | +## Opções | ||
69 | + | ||
70 | +Quando você usa Get.put, lazyPut e putAsync, existe algumas opções que você pode alterar se quiser | ||
71 | + | ||
72 | +- No Get.put(): | ||
73 | + | ||
74 | +```dart | ||
75 | +Get.put<S>( | ||
76 | + // obrigatório: a classe que você quer salvar, como um controller ou qualquer outra coisa | ||
77 | + // obs: Esse "S" significa que pode ser qualquer coisa | ||
78 | + S dependency | ||
79 | + | ||
80 | + // opcional: isso é pra quando você quer múltiplas classess que são do mesmo tipo | ||
81 | + // já que você normalmente pega usando "Get.find<Controller>()", | ||
82 | + // você precisa usar uma tag para dizer qual das instâncias vc precisa | ||
83 | + // precisa ser uma string única | ||
84 | + String tag, | ||
85 | + | ||
86 | + // opcional: por padrão, get vai descartar as instâncias quando elas não são mais usadas (exemplo, | ||
87 | + // o controller de uma view que foi fechada) // Mas talvez você precisa quea instância seja mantida por todo o app, como a instância do SharedPreferences por exemplo | ||
88 | + // então vc usa isso | ||
89 | + // padrão: false | ||
90 | + bool permanent = false, | ||
91 | + | ||
92 | + // opcional: permite que depois de usar uma classe abstrata num teste, | ||
93 | + // trocar por outra e continuar com o teste | ||
94 | + // padrão: false | ||
95 | + bool overrideAbstract = false, | ||
96 | + | ||
97 | + // opcional: permite criar a dependência usando uma função em vez da dependênia em si | ||
98 | + FcBuilderFunc<S> builder, | ||
99 | +) | ||
100 | +``` | ||
101 | + | ||
102 | +- No Get.lazyPut: | ||
103 | + | ||
104 | +```dart | ||
105 | +Get.lazyPut<S>( | ||
106 | + // obrigatório: um método que vai ser executado quando sua classe é chamada pela primeira vez | ||
107 | + // Exemplo: "Get.lazyPut<Controller>( () => Controller() | ||
108 | + FcBuilderFunc builder, | ||
109 | + | ||
110 | + // opcional: igual ao Get.put(), é usado quando você precisa de múltiplas instâncias de uma mesma classe | ||
111 | + // precisa ser uma string única | ||
112 | + String tag, | ||
113 | + | ||
114 | + // opcional: é similar a "permanent", mas a instância é descartada quando | ||
115 | + // não é mais usada e é refeita quando precisa ser usada novamente | ||
116 | + // Assim como a opção SmartManagement.keepFactory na api Bindings | ||
117 | + // padrão: false | ||
118 | + bool fenix = false | ||
119 | + | ||
120 | +) | ||
121 | +``` | ||
122 | + | ||
123 | +- No Get.putAsync: | ||
124 | + | ||
125 | +```dart | ||
126 | +Get.putAsync<S>( | ||
127 | + // Obrigatório: um método assíncrono que vai ser executado para instanciar sua classe | ||
128 | + // Exemplo: Get.putAsyn<YourAsyncClass>( () async => await YourAsyncClass() ) | ||
129 | + FcBuilderFuncAsync<S> builder, | ||
130 | + | ||
131 | + // opcional: igual ao Get.put(), é usado quando você precisa de múltiplas instâncias de uma mesma classe | ||
132 | + // precisa ser uma string única | ||
133 | + String tag, | ||
134 | + | ||
135 | + // opcional: igual ao Get.put(), usado quando você precisa manter a instância ativa no app inteiro. | ||
136 | + // padrão: false | ||
137 | + bool permanent = false | ||
138 | +``` | ||
139 | + | ||
65 | ## Bindings | 140 | ## Bindings |
66 | 141 | ||
67 | Um dos grandes diferenciais desse package, talvez, seja a possibilidade de integração total com rotas, gerenciador de estado e gerenciador de dependências. | 142 | Um dos grandes diferenciais desse package, talvez, seja a possibilidade de integração total com rotas, gerenciador de estado e gerenciador de dependências. |
-
Please register or login to post a comment