Jonny Borges
Committed by GitHub

Merge pull request #363 from Nipodemos/docs_update

[docs] more docs for dependency management
@@ -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,6 +429,7 @@ GetMaterialApp( @@ -426,6 +429,7 @@ GetMaterialApp(
426 ] 429 ]
427 ) 430 )
428 ``` 431 ```
  432 +
429 # ¿Por qué Getx? 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.
@@ -20,7 +20,8 @@ @@ -20,7 +20,8 @@
20 20
21 [**Telegram (Portuguese)**](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) 21 [**Telegram (Portuguese)**](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g)
22 22
23 -# Topics: 23 +# Topics
  24 +
24 - [**About Get**](#about-get) 25 - [**About Get**](#about-get)
25 - [**Installing**](#installing) 26 - [**Installing**](#installing)
26 - [**The Three pillars**](#the-three-pillars) 27 - [**The Three pillars**](#the-three-pillars)
@@ -36,7 +37,7 @@ @@ -36,7 +37,7 @@
36 - [Other Advanced APIs](#other-advanced-apis) 37 - [Other Advanced APIs](#other-advanced-apis)
37 - [Optional Global Settings and Manual configurations](#optional-global-settings-and-manual-configurations) 38 - [Optional Global Settings and Manual configurations](#optional-global-settings-and-manual-configurations)
38 - [**Breaking changes from 2.0**](#breaking-changes-from-20) 39 - [**Breaking changes from 2.0**](#breaking-changes-from-20)
39 -- [**Why GetX?**](#why-getx?) 40 +- [**Why GetX?**](#why-getx)
40 41
41 # About Get 42 # About Get
42 43
@@ -80,6 +81,7 @@ void main() => runApp(GetMaterialApp(home: Home())); @@ -80,6 +81,7 @@ void main() => runApp(GetMaterialApp(home: Home()));
80 ``` 81 ```
81 82
82 - 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. 83 - 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.
  84 +- 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
83 85
84 - Step 2: 86 - Step 2:
85 Create your business logic class and place all variables, methods and controllers inside it. 87 Create your business logic class and place all variables, methods and controllers inside it.
@@ -185,17 +187,19 @@ Noticed that you didn't had to use context to do any of these things? That's one @@ -185,17 +187,19 @@ Noticed that you didn't had to use context to do any of these things? That's one
185 187
186 See a more in-depth explanation of dependency management [here](./docs/en_US/dependency_management.md) 188 See a more in-depth explanation of dependency management [here](./docs/en_US/dependency_management.md)
187 189
188 -- 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.  
189 -  
190 -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: 190 +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:
191 191
192 ```dart 192 ```dart
193 Controller controller = Get.put(Controller()); // Rather Controller controller = Controller(); 193 Controller controller = Get.put(Controller()); // Rather Controller controller = Controller();
194 ``` 194 ```
195 195
  196 +- 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.
  197 +
196 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. 198 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.
197 So you can use your controller (or class Bloc) normally 199 So you can use your controller (or class Bloc) normally
198 200
  201 +**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
  202 +
199 ```dart 203 ```dart
200 controller.fetchApi(); 204 controller.fetchApi();
201 ``` 205 ```
@@ -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.
@@ -478,12 +479,11 @@ GetMaterialApp( @@ -478,12 +479,11 @@ GetMaterialApp(
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 -  
1 -  
2 # Dependency Management 1 # Dependency Management
3 2
4 ## Simple Instance Manager 3 ## Simple Instance Manager
5 4
6 -- 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.  
7 -  
8 -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: 5 +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:
9 6
10 ```dart 7 ```dart
11 Controller controller = Get.put(Controller()); // Rather Controller controller = Controller(); 8 Controller controller = Get.put(Controller()); // Rather Controller controller = Controller();
12 ``` 9 ```
13 10
  11 +- 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.
  12 +
14 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. 13 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.
15 -So you can use your controller (or class Bloc) normally 14 +So you can use your controller (or Bloc class) normally
  15 +
  16 +**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
16 17
17 ```dart 18 ```dart
18 controller.fetchApi(); 19 controller.fetchApi();
@@ -61,6 +62,79 @@ To remove a instance of Get: @@ -61,6 +62,79 @@ To remove a instance of Get:
61 Get.delete<Controller>(); 62 Get.delete<Controller>();
62 ``` 63 ```
63 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 +
64 ## Bindings 138 ## Bindings
65 139
66 One of the great differentials of this package, perhaps, is the possibility of full integration of the routes, state manager and dependency manager. 140 One of the great differentials of this package, perhaps, is the possibility of full integration of the routes, state manager and dependency manager.
@@ -76,7 +150,9 @@ In addition, the Binding class will allow you to have SmartManager configuration @@ -76,7 +150,9 @@ In addition, the Binding class will allow you to have SmartManager configuration
76 - Create a class and implements Binding 150 - Create a class and implements Binding
77 151
78 ```dart 152 ```dart
79 -class HomeBinding implements Bindings{ 153 +class HomeBinding implements Bindings {
  154 +
  155 +}
80 ``` 156 ```
81 157
82 Your IDE will automatically ask you to override the "dependencies" method, and you just need to click on the lamp, override the method, and insert all the classes you are going to use on that route: 158 Your IDE will automatically ask you to override the "dependencies" method, and you just need to click on the lamp, override the method, and insert all the classes you are going to use on that route:
@@ -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.