Nipodemos

docs(pt-BR): make dependency management docs of pt-br up to date

fix small typos
@@ -189,7 +189,7 @@ And then you will be able to recover your controller data that was obtained back @@ -189,7 +189,7 @@ And then you will be able to recover your controller data that was obtained back
189 Text(controller.textFromApi); 189 Text(controller.textFromApi);
190 ``` 190 ```
191 191
192 -Since the returnd value is a normal class, you can do anything you want: 192 +Since the returned value is a normal class, you can do anything you want:
193 ```dart 193 ```dart
194 int count = Get.find<SharedPreferences>().getInt('counter'); 194 int count = Get.find<SharedPreferences>().getInt('counter');
195 print(count); // out: 12345 195 print(count); // out: 12345
@@ -208,7 +208,7 @@ First, let's of the `fenix` of Get.lazyPut and the `permanent` of the other meth @@ -208,7 +208,7 @@ First, let's of the `fenix` of Get.lazyPut and the `permanent` of the other meth
208 The fundamental difference between `permanent` and `fenix` is how you want to store your instances. 208 The fundamental difference between `permanent` and `fenix` is how you want to store your instances.
209 209
210 Reinforcing: by default, GetX deletes instances when they are not is use. 210 Reinforcing: by default, GetX deletes instances when they are not is use.
211 -It means that: If screen 1 has controller 1 and screen 2 has controller 2 and you remove the first route from stack, (like if you use `Get.off()` or `Get.offName()`) the controller 1 lost it's use so it will be erased. 211 +It means that: If screen 1 has controller 1 and screen 2 has controller 2 and you remove the first route from stack, (like if you use `Get.off()` or `Get.offNamed()`) the controller 1 lost it's use so it will be erased.
212 212
213 But if you want to opt for using `permanent:true`, then the controller will not be lost in this transition - which is very useful for services that you want to keep alive throughout the entire application. 213 But if you want to opt for using `permanent:true`, then the controller will not be lost in this transition - which is very useful for services that you want to keep alive throughout the entire application.
214 214
@@ -298,7 +298,7 @@ GetMaterialApp( @@ -298,7 +298,7 @@ GetMaterialApp(
298 298
299 ### BindingsBuilder 299 ### BindingsBuilder
300 300
301 -The default way of creating a binding creating a class that implements Bindings. 301 +The default way of creating a binding is by creating a class that implements Bindings.
302 But alternatively, you can use `BindingsBuilder` callback so that you can simply use a function to instantiate whatever you desire. 302 But alternatively, you can use `BindingsBuilder` callback so that you can simply use a function to instantiate whatever you desire.
303 303
304 Example: 304 Example:
@@ -353,7 +353,7 @@ void main () { @@ -353,7 +353,7 @@ void main () {
353 It is the default one. Dispose classes that are not being used and were not set to be permanent. In the majority of the cases you will want to keep this config untouched. If you new to GetX then don't change this. 353 It is the default one. Dispose classes that are not being used and were not set to be permanent. In the majority of the cases you will want to keep this config untouched. If you new to GetX then don't change this.
354 354
355 #### SmartManagement.onlyBuilders 355 #### SmartManagement.onlyBuilders
356 -With this option, only controllers started in `init:` or loaded into a Binding with `Get.lazyPut` will be disposed. 356 +With this option, only controllers started in `init:` or loaded into a Binding with `Get.lazyPut()` will be disposed.
357 357
358 If you use `Get.put()` or `Get.putAsync()` or any other approach, SmartManagement will not have permissions to exclude this dependency. 358 If you use `Get.put()` or `Get.putAsync()` or any other approach, SmartManagement will not have permissions to exclude this dependency.
359 359
@@ -361,7 +361,7 @@ With the default behavior, even widgets instantiated with "Get.put" will be remo @@ -361,7 +361,7 @@ With the default behavior, even widgets instantiated with "Get.put" will be remo
361 361
362 #### SmartManagement.keepFactory 362 #### SmartManagement.keepFactory
363 363
364 -Just like SmartManagement.full, it will remove it's dependencies when it's not being used anymore. However, it will keep the their factory, which means it will recreate the dependency if you need that instance again. 364 +Just like SmartManagement.full, it will remove it's dependencies when it's not being used anymore. However, it will keep their factory, which means it will recreate the dependency if you need that instance again.
365 365
366 ### How bindings work under the hood 366 ### How bindings work under the hood
367 Bindings creates transitory factories, which are created the moment you click to go to another screen, and will be destroyed as soon as the screen-changing animation happens. 367 Bindings creates transitory factories, which are created the moment you click to go to another screen, and will be destroyed as soon as the screen-changing animation happens.
  1 +# Gerenciamento de dependência
1 - [Gerenciamento de dependência](#gerenciamento-de-dependência) 2 - [Gerenciamento de dependência](#gerenciamento-de-dependência)
2 - [Gerenciamento de dependências simples](#gerenciamento-de-dependências-simples) 3 - [Gerenciamento de dependências simples](#gerenciamento-de-dependências-simples)
3 - - [Opções](#opções) 4 + - [Métodos de criar instâncias](#métodos-de-criar-instâncias)
  5 + - [Get.put()](#getput)
  6 + - [Get.lazyPut](#getlazyput)
  7 + - [Get.putAsync](#getputasync)
  8 + - [Get.create](#getcreate)
  9 + - [Usando as classes/dependências instanciadas](#usando-as-classesdependências-instanciadas)
  10 + - [Diferenças entre os métodos](#diferenças-entre-os-métodos)
4 - [Bindings](#bindings) 11 - [Bindings](#bindings)
5 - - [Como utilizar](#como-utilizar)  
6 -  
7 -# Gerenciamento de dependência  
8 -  
9 -## Gerenciamento de dependências simples  
10 -  
11 -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: 12 + - [Classe Bindings](#classe-bindings)
  13 + - [BindingsBuilder](#bindingsbuilder)
  14 + - [SmartManagement](#smartmanagement)
  15 + - [Como alterar](#como-alterar)
  16 + - [SmartManagement.full](#smartmanagementfull)
  17 + - [SmartManagement.onlyBuilders](#smartmanagementonlybuilders)
  18 + - [SmartManagement.keepFactory](#smartmanagementkeepfactory)
  19 + - [Como os Bindings funcionam](#como-os-bindings-funcionam)
  20 + - [Notas](#notas)
  21 +
  22 +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:
12 23
13 ```dart 24 ```dart
14 Controller controller = Get.put(Controller()); // Em vez de Controller controller = Controller(); 25 Controller controller = Get.put(Controller()); // Em vez de Controller controller = Controller();
15 ``` 26 ```
16 27
17 -* 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ê.  
18 -  
19 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 28 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
20 29
21 Para que então você possa usar seu controller (ou uma classe Bloc) normalmente 30 Para que então você possa usar seu controller (ou uma classe Bloc) normalmente
22 31
23 -**Tip:** O gerenciamento de dependência do get é desacoplado 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 32 +- 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](#bindings), que vai fazer tudo isso automaticamente para você.
  33 +- Nota²: O gerenciamento de dependência do get é desacoplado 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
24 34
25 -```dart  
26 -controller.fetchApi();  
27 -``` 35 +## Métodos de criar instâncias
  36 +Todos os métodos e seus parâmetros configuráveis são:
28 37
29 -Agora, imagine que você navegou por inúmeras rotas e precisa de dados que foram deixados para trás em seu controlador. Você precisaria de um gerenciador de estado combinado com o Provider ou Get_it, correto? Não com Get. Você só precisa pedir ao Get para "procurar" pelo seu controlador, você não precisa de nenhuma dependência adicional para isso: 38 +### Get.put()
  39 +A forma mais comum de instanciar uma dependência. Bom para os controllers das views por exemplo.
30 40
31 ```dart 41 ```dart
32 -Controller controller = Get.find();  
33 -// Sim, parece Magia, o Get irá descobrir qual é seu controller, e irá te entregar.  
34 -// Você pode ter 1 milhão de controllers instanciados, o Get sempre te entregará o controller correto.  
35 -// Apenas se lembre de Tipar seu controller, final controller = Get.find(); por exemplo, não irá funcionar.  
36 -``` 42 +Get.put<Classe>(Classe());
37 43
38 -E então você será capaz de recuperar os dados do seu controller que foram obtidos anteriormente: 44 +Get.put<LoginController>(LoginController(), permanent: true);
39 45
40 -```dart  
41 -Text(controller.textFromApi);  
42 -```  
43 -  
44 -Procurando por `lazyLoading`?(carregar somente quando for usar) Você pode declarar todos os seus controllers, e eles só vão ser inicializados e chamados quando alguém precisar. Você pode fazer isso  
45 -  
46 -```dart  
47 -Get.lazyPut<Service>(()=> ApiMock());  
48 -/// ApiMock só será chamado quando alguém usar o Get.find<Service> pela primeira vez 46 +Get.put<ListItemController>(
  47 + ListItemController,
  48 + tag: "uma string única",
  49 +);
49 ``` 50 ```
50 51
51 -Se você quiser registar uma instância assíncrona, você pode usar `Get.putAsync()`:  
52 -  
53 -```dart  
54 -Get.putAsync<SharedPreferences>(() async {  
55 - final prefs = await SharedPreferences.getInstance();  
56 - await prefs.setInt('contador', 12345);  
57 - return prefs;  
58 -});  
59 -```  
60 -  
61 -Como usar:  
62 -  
63 -```dart  
64 -int valor = Get.find<SharedPreferences>().getInt('contador');  
65 -print(valor); // Imprime: 123456  
66 -```  
67 -  
68 -Para remover a instância do Get:  
69 -  
70 -```dart  
71 -Get.delete<Controller>();  
72 -```  
73 -  
74 -## Métodos de instanciamento.  
75 -  
76 -Apesar do Get já entregar configurações muito boas para uso, é possível refiná-las ainda mais para que sejam de utilidade ainda maior para você programador. Os métodos e seus parâmetros configuráveis são:  
77 -  
78 -- Get.put():  
79 - 52 +E essas são todas as opções que você pode definir:
80 ```dart 53 ```dart
81 Get.put<S>( 54 Get.put<S>(
82 // obrigatório: a classe que você quer salvar, como um controller ou qualquer outra coisa 55 // obrigatório: a classe que você quer salvar, como um controller ou qualquer outra coisa
@@ -100,12 +73,31 @@ Get.put<S>( @@ -100,12 +73,31 @@ Get.put<S>(
100 ) 73 )
101 ``` 74 ```
102 75
103 -- Get.lazyPut: 76 +### Get.lazyPut
  77 +É possível que você vá inserir essa instância, mas sabe que não vai usá-la imediatamente no app.
  78 +Nesses casos pode ser usado o lazyPut que só cria a instância no momento que ela for necessária pela primeira vez.
  79 +É útil também caso seja uma classe que é muito pesada e você não quer carregar ela junto com tudo quando o app abre.
  80 +
  81 +```dart
  82 +/// ApiMock só será instanciado quando Get.find<ApiMock> for usado pela primeira vez
  83 +Get.lazyPut<ApiMock>(() => ApiMock());
  84 +
  85 +Get.lazyPut<FirebaseAuth>(
  86 + () => {
  87 + // ... alguma lógica se necessário
  88 + return FirebaseAuth()
  89 + },
  90 + tag: Math.random().toString(),
  91 + fenix: true
  92 +)
  93 +
  94 +Get.lazyPut<Controller>( () => Controller() )
  95 +```
104 96
  97 +E essas são todas as opções que você pode definir:
105 ```dart 98 ```dart
106 Get.lazyPut<S>( 99 Get.lazyPut<S>(
107 // obrigatório: um método que vai ser executado quando sua classe é chamada pela primeira vez 100 // obrigatório: um método que vai ser executado quando sua classe é chamada pela primeira vez
108 - // Exemplo: "Get.lazyPut<Controller>( () => Controller()  
109 InstanceBuilderCallback builder, 101 InstanceBuilderCallback builder,
110 102
111 // opcional: igual ao Get.put(), é usado quando você precisa de múltiplas instâncias de uma mesma classe 103 // opcional: igual ao Get.put(), é usado quando você precisa de múltiplas instâncias de uma mesma classe
@@ -121,12 +113,24 @@ Get.lazyPut<S>( @@ -121,12 +113,24 @@ Get.lazyPut<S>(
121 ) 113 )
122 ``` 114 ```
123 115
124 -- Get.putAsync: 116 +### Get.putAsync
  117 +Se você quiser criar uma instância assíncrona, você pode usar `Get.putAsync`:
125 118
126 ```dart 119 ```dart
  120 +Get.putAsync<SharedPreferences>(() async {
  121 + final prefs = await SharedPreferences.getInstance();
  122 + await prefs.setInt('counter', 12345);
  123 + return prefs;
  124 +});
  125 +
  126 +Get.putAsync<SuaClasseAssincrona>( () async => await SuaClasseAssincrona() )
  127 +```
  128 +
  129 +E essas são todas as opções que você pode definir:
  130 +```dart
127 Get.putAsync<S>( 131 Get.putAsync<S>(
  132 +
128 // Obrigatório: um método assíncrono que vai ser executado para instanciar sua classe 133 // Obrigatório: um método assíncrono que vai ser executado para instanciar sua classe
129 - // Exemplo: Get.putAsyn<YourAsyncClass>( () async => await YourAsyncClass() )  
130 AsyncInstanceBuilderCallback<S> builder, 134 AsyncInstanceBuilderCallback<S> builder,
131 135
132 // opcional: igual ao Get.put(), é usado quando você precisa de múltiplas instâncias de uma mesma classe 136 // opcional: igual ao Get.put(), é usado quando você precisa de múltiplas instâncias de uma mesma classe
@@ -138,12 +142,19 @@ Get.putAsync<S>( @@ -138,12 +142,19 @@ Get.putAsync<S>(
138 bool permanent = false 142 bool permanent = false
139 ``` 143 ```
140 144
141 -- Get.create: 145 +### Get.create
  146 +Esse é mais específico. Uma explicação detalhada do que esse método é e as diferenças dele para os outros podem ser encontradas em [Diferenças entre os métodos](#diferenças-entre-os-métodos)
  147 +
  148 +
  149 +```dart
  150 +Get.Create<SomeClass>(() => SomeClass());
  151 +Get.Create<LoginController>(() => LoginController());
  152 +```
142 153
  154 +E essas são todas as opções que você pode definir:
143 ```dart 155 ```dart
144 Get.create<S>( 156 Get.create<S>(
145 // Obrigatório: Uma função que retorna uma classe que será "fabricada" toda vez que Get.find() for chamado 157 // Obrigatório: Uma função que retorna uma classe que será "fabricada" toda vez que Get.find() for chamado
146 - // Exemplo: Get.create<YourClass>(() => YourClass())  
147 InstanceBuilderCallback<S> builder, 158 InstanceBuilderCallback<S> builder,
148 159
149 // opcional: igual ao Get.put(), mas é usado quando você precisa de múltiplas instâncias de uma mesma classe. 160 // opcional: igual ao Get.put(), mas é usado quando você precisa de múltiplas instâncias de uma mesma classe.
@@ -156,14 +167,49 @@ Get.create<S>( @@ -156,14 +167,49 @@ Get.create<S>(
156 bool permanent = true 167 bool permanent = true
157 ``` 168 ```
158 169
159 -### Diferenças entre os métodos: 170 +## Usando as classes/dependências instanciadas
  171 +
  172 +Agora, imagine que você navegou por inúmeras rotas e precisa de dados que foram deixados para trás em seu controlador. Você precisaria de um gerenciador de estado combinado com o Provider ou Get_it, correto? Não com Get. Você só precisa pedir ao Get para "procurar" pelo seu controlador, você não precisa de nenhuma dependência adicional para isso:
  173 +
  174 +```dart
  175 +final controller = Get.find<Controller>();
  176 +// OU
  177 +Controller controller = Get.find();
  178 +// Sim, parece Magia, o Get irá descobrir qual é seu controller, e irá te entregar.
  179 +// Você pode ter 1 milhão de controllers instanciados, o Get sempre te entregará o controller correto.
  180 +// Apenas se lembre de Tipar seu controller, final controller = Get.find(); por exemplo, não irá funcionar.
  181 +```
  182 +
  183 +E então você será capaz de recuperar os dados do seu controller que foram obtidos anteriormente:
  184 +
  185 +```dart
  186 +Text(controller.textFromApi);
  187 +```
  188 +
  189 +Já que o valor retornado é uma classe normal, você pode fazer o que quiser com ela:
  190 +
  191 +```dart
  192 +int valor = Get.find<SharedPreferences>().getInt('contador');
  193 +print(valor); // Imprime: 123456
  194 +```
  195 +
  196 +Para remover a instância do Get:
  197 +
  198 +```dart
  199 +Get.delete<Controller>();
  200 +```
  201 +
  202 +## Diferenças entre os métodos
160 203
161 Primeiro, vamos falar do `fenix` do Get.lazyPut e o `permanent` dos outros métodos. 204 Primeiro, vamos falar do `fenix` do Get.lazyPut e o `permanent` dos outros métodos.
162 205
163 A diferença fundamental entre `permanent` e `fenix` está em como você quer armazenar as suas instâncias. 206 A diferença fundamental entre `permanent` e `fenix` está em como você quer armazenar as suas instâncias.
  207 +
164 Reforçando: por padrão, o Get apaga as instâncias quando elas não estão em uso. 208 Reforçando: por padrão, o Get apaga as instâncias quando elas não estão em uso.
165 Isso significa que: Se a tela 1 tem o controller 1 e a tela 2 tem o controller 2 e você remove a primeira rota da stack (usando `Get.off()` ou `Get.offNamed`), o controller 1 perdeu seu uso portanto será apagado. 209 Isso significa que: Se a tela 1 tem o controller 1 e a tela 2 tem o controller 2 e você remove a primeira rota da stack (usando `Get.off()` ou `Get.offNamed`), o controller 1 perdeu seu uso portanto será apagado.
  210 +
166 Mas se você optar por usar `permanent: true`, então ela não se perde nessa transição - o que é muito útil para serviços que você quer manter rodando na aplicação inteira. 211 Mas se você optar por usar `permanent: true`, então ela não se perde nessa transição - o que é muito útil para serviços que você quer manter rodando na aplicação inteira.
  212 +
167 Já o `fenix`, é para serviços que você não se preocupa em perder por uma tela ou outra, mas quando você precisar chamar o serviço, você espera que ele "retorne das cinzas" (`fenix: true`), criando uma nova instância. 213 Já o `fenix`, é para serviços que você não se preocupa em perder por uma tela ou outra, mas quando você precisar chamar o serviço, você espera que ele "retorne das cinzas" (`fenix: true`), criando uma nova instância.
168 214
169 Prosseguindo com as diferenças entre os métodos: 215 Prosseguindo com as diferenças entre os métodos:
@@ -190,9 +236,9 @@ Isso permite Get saber qual tela está sendo mostrada quando um controller parti @@ -190,9 +236,9 @@ Isso permite Get saber qual tela está sendo mostrada quando um controller parti
190 236
191 Somando a isso, a classe Binding vai permitir que você tenha um controle de configuração SmartManager. Você pode configurar as dependências que serão organizadas quando for remover a rota da stack, ou quando o widget que usa ele é definido, ou nada disso. Você vai ter gerenciador de dependências inteligente trabalhando para você, e você pode configurá-lo como quiser. 237 Somando a isso, a classe Binding vai permitir que você tenha um controle de configuração SmartManager. Você pode configurar as dependências que serão organizadas quando for remover a rota da stack, ou quando o widget que usa ele é definido, ou nada disso. Você vai ter gerenciador de dependências inteligente trabalhando para você, e você pode configurá-lo como quiser.
192 238
193 -### Como utilizar 239 +### Classe Bindings
194 240
195 -* Para usar essa API você só precisa criar uma classe que implementa a Bindings: 241 +Crie uma classe qualquer que implemente a Bindings.
196 242
197 ```dart 243 ```dart
198 class HomeBinding implements Bindings {} 244 class HomeBinding implements Bindings {}
@@ -204,10 +250,17 @@ Sua IDE vai automaticamente te perguntar para dar override no método `dependenc @@ -204,10 +250,17 @@ Sua IDE vai automaticamente te perguntar para dar override no método `dependenc
204 class HomeBinding implements Bindings{ 250 class HomeBinding implements Bindings{
205 @override 251 @override
206 void dependencies() { 252 void dependencies() {
207 - Get.lazyPut<ControllerX>(() => ControllerX()); 253 + Get.lazyPut<HomeController>(() => HomeController());
208 Get.lazyPut<Service>(()=> Api()); 254 Get.lazyPut<Service>(()=> Api());
209 } 255 }
210 } 256 }
  257 +
  258 +class DetalhesBinding implements Bindings {
  259 + @override
  260 + void dependencies() {
  261 + Get.lazyPut<DetalhesController>(() => DetalhesController());
  262 + }
  263 +}
211 ``` 264 ```
212 265
213 Agora você só precisa informar sua rota que você vai usar esse binding para fazer a conexão entre os gerenciadores de rotas, dependências e estados. 266 Agora você só precisa informar sua rota que você vai usar esse binding para fazer a conexão entre os gerenciadores de rotas, dependências e estados.
@@ -216,14 +269,24 @@ Usando rotas nomeadas @@ -216,14 +269,24 @@ Usando rotas nomeadas
216 269
217 ```dart 270 ```dart
218 getPages: [ 271 getPages: [
219 - GetPage(name: '/', page: () => Home(), binding: HomeBinding()),  
220 -] 272 + GetPage(
  273 + name: '/',
  274 + page: () => HomeView(),
  275 + binding: HomeBinding(),
  276 + ),
  277 + GetPage(
  278 + name: '/detalhes',
  279 + page: () => DetalhesView(),
  280 + binding: DetalhesBinding(),
  281 + ),
  282 +];
221 ``` 283 ```
222 284
223 Usando rotas normais: 285 Usando rotas normais:
224 286
225 ```dart 287 ```dart
226 Get.to(Home(), binding: HomeBinding()); 288 Get.to(Home(), binding: HomeBinding());
  289 +Get.to(DetalhesView(), binding: DetalhesBinding())
227 ``` 290 ```
228 291
229 Então, você não vai precisar se preocupar com gerenciamento da memória da sua aplicação mais, Get vai fazer para você. 292 Então, você não vai precisar se preocupar com gerenciamento da memória da sua aplicação mais, Get vai fazer para você.
@@ -237,17 +300,82 @@ GetMaterialApp( @@ -237,17 +300,82 @@ GetMaterialApp(
237 ) 300 )
238 ``` 301 ```
239 302
240 -Se você quiser usar suas inicializações em um lugar, você pode usar `SmartManagement.keepfactory` para permitir isso. 303 +### BindingsBuilder
  304 +
  305 +A forma padrão de criar um binding é criando uma classe que implementa o Bindings.
  306 +
  307 +Mas alternativamente, você também pode usar a função `BindingsBuilder` par que você possa simplesmente usar uma função pra criar essas instâncias
  308 +
  309 +Exemplo:
  310 +
  311 +```dart
  312 +getPages: [
  313 + GetPage(
  314 + name: '/',
  315 + page: () => HomeView(),
  316 + binding: BindingsBuilder(() => {
  317 + Get.lazyPut<ControllerX>(() => ControllerX());
  318 + Get.put<Service>(()=> Api());
  319 + }),
  320 + ),
  321 + GetPage(
  322 + name: '/detalhes',
  323 + page: () => DetalhesView(),
  324 + binding: BindingsBuilder(() => {
  325 + Get.lazyPut<DetalhesController>(() => DetalhesController());
  326 + }),
  327 + ),
  328 +];
  329 +```
  330 +
  331 +Dessa forma você pode evitar criar uma classe Binding para cada rota, deixando tudo mais simples.
  332 +
  333 +As duas formas funcionam perfeitamente e você é livre para usar o que mais se encaixa no seu estilo de uso
  334 +
  335 +### SmartManagement
  336 +
  337 +GetX por padrão descarta controllers não utilizados da memória, mesmo que uma falha ocorra e um widget que usa ele não for propriamente descartado.
  338 +Essa é o chamado modo `full` do gerenciamento de dependências.
  339 +Mas se você quiser mudar a forma que o GetX controla o descarte das classes, você tem a sua disposição a classe `SmartManagement` que pode definir diferentes comportamentos.
  340 +
  341 +#### Como alterar
  342 +
  343 +Se você quiser alterar essa configuração (que normalmente você não precisa mudar) essa é a forma:
  344 +
  345 +```dart
  346 +void main () {
  347 + runApp(
  348 + GetMaterialApp(
  349 + smartManagement: SmartManagement.onlyBuilders //Aqui
  350 + home: Home(),
  351 + )
  352 + )
  353 +}
  354 +```
  355 +
  356 +#### SmartManagement.full
  357 +
  358 +É o padrão. Descarta as classes que não estão mais sendo utilizadas e que não foram definidas para serem permanents. Na grande maioria dos casos você não vai querer nem precisar alterar essa configuração. Se você for novo com GetX, não altere isto.
  359 +
  360 +#### SmartManagement.onlyBuilders
  361 +Com essa opção, somente controllers iniciados pelo `init:` or iniciados dentro de um Binding com `Get.lazyPut()` serão descartados.
  362 +
  363 +Se você usar `Get.put()` ou `Get.putAsync()` or qualquer outra forma, SmartManagement não vai ter permissão para excluir essa dependência.
241 364
242 -Sempre prefira usar SmartManagement padrão (full), você não precisa configurar nada pra isso, o Get já te entrega ele assim por padrão. Ele com certeza irá eliminar todos seus controladores em desuso da memória, pois seu controle refinado remove a dependência, ainda que haja uma falha e um widget que utiliza ele não seja disposado adequadamente. Ele também é seguro o bastante para ser usado só com StatelessWidget, pois possui inúmeros callbacks de segurança que impedirão de um controlador permanecer na memória se não estiver sendo usado por nenhum widget. No entanto, se você se incomodar com o comportamento padrão, ou simplesmente não quiser que isso ocorra, Get disponibiliza outras opções mais brandas de gerenciamento inteligente de memória, como o SmartManagement.onlyBuilders, que dependerá da remoção efetiva dos widgets que usam o controlador da árvore para removê-lo, e você poderá impedir que um controlador seja disposado usando "autoRemove:false" no seu GetBuilder/GetX. 365 +Com o comportamento padrão, até widgets instanciados com `Get.put()` serão removidos, ao contrário do `SmartManagement.onlyBuilders`.
243 366
244 -Com essa opção, apenas os controladores iniciados no "init:" ou carregados em um Binding com "Get.lazyPut" serão disposados, se você usar Get.put ou qualquer outra abordagem, o SmartManagement não terá permissões para excluir essa dependência. 367 +#### SmartManagement.keepFactory
245 368
246 -Com o comportamento padrão, até os widgets instanciados com "Get.put" serão removidos, sendo a diferença crucial entre eles. 369 +Assim como o modo `full`, ele vai descartar as dependências quando não estiverem sendo mais utilizadas. Porém, ele irá manter a "factory" de cada dependência. Isso significa que caso você precise de da dependência novamente, ele vai recriar aquele instância novamente.
247 370
248 -`SmartManagement.keepFactory` é como o SmartManagement.full, com uma única diferença. o full expurga até as fabricas das dependências, de forma que o Get.lazyPut() só conseguirá ser chamado uma única vez e sua fábrica e referências serão auto-destruídas. `SmartManagement.keepFactory` irá remover suas dependências quando necessário, no entanto, vai manter guardado a "forma" destas, para fabricar uma igual se você precisar novamente de uma instância daquela. 371 +#### Como os Bindings funcionam
  372 +Bindings cria fábricas transitórias, que são criadas no momento que você clica para ir para outra tela, e será destruído assim que a animação de mudança de tela acontecer.
  373 +É tão pouco tempo, tão rápido, que o analyzer sequer conseguirá registrá-lo.
  374 +Quando você navegar para essa tela novamente, uma nova fábrica temporária será chamada, então isso é preferível à usar `SmartManagement.keepFactory`, mas se você não quer ter o trabalho de criar Bindings, ou deseja manter todas suas dependências no mesmo Binding, isso certamente irá te ajudar.
  375 +Fábricas ocupam pouca memória, elas não guardam instâncias, mas uma função com a "forma" daquela classe que você quer.
  376 +Isso é muito pouco, mas como o objetivo dessa lib é obter o máximo de desempenho possível usando o mínimo de recursos, Get remove até as fábricas por padrão. Use o que achar mais conveniente para você.
249 377
250 -Em vez de usar `SmartManagement.keepFactory` você pode usar Bindings. Bindings cria fábricas transitórias, que são criadas no momento que você clica para ir para outra tela, e será destruído assim que a animação de mudança de tela acontecer. É tão pouco tempo, que o analyzer sequer conseguirá registrá-lo. Quando você navegar para essa tela novamente, uma nova fábrica temporária será chamada, então isso é preferível à usar `SmartManagement.keepFactory`, mas se você não quer ter o trabalho de criar Bindings, ou deseja manter todas suas dependências no mesmo Binding, isso certamente irá te ajudar. Fábricas ocupam pouca memória, elas não guardam instâncias, mas uma função com a "forma" daquela classe que você quer. Isso é muito pouco, mas como o objetivo dessa lib é obter o máximo de desempenho possível usando o mínimo de recursos, Get remove até as fabricas por padrão. Use o que achar mais conveniente para você. 378 +## Notas
251 379
252 * Nota: NÃO USE SmartManagement.keepfactory se você está usando vários Bindings. Ele foi criado para ser usado sem Bindings, ou com um único Binding ligado ao GetMaterialApp lá no `initialBinding` 380 * Nota: NÃO USE SmartManagement.keepfactory se você está usando vários Bindings. Ele foi criado para ser usado sem Bindings, ou com um único Binding ligado ao GetMaterialApp lá no `initialBinding`
253 381