Committed by
GitHub
Merge pull request #473 from paulosilva159/patch-1
Update dependency_management.md
Showing
1 changed file
with
44 additions
and
11 deletions
@@ -20,7 +20,7 @@ Em vez de instanciar sua classe dentro da classe que você está usando, você e | @@ -20,7 +20,7 @@ Em vez de instanciar sua classe dentro da classe que você está usando, você e | ||
20 | 20 | ||
21 | Para que então você possa usar seu controller (ou uma classe Bloc) normalmente | 21 | Para que então você possa usar seu controller (ou uma classe Bloc) normalmente |
22 | 22 | ||
23 | -**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 | 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 |
24 | 24 | ||
25 | ```dart | 25 | ```dart |
26 | controller.fetchApi(); | 26 | controller.fetchApi(); |
@@ -71,11 +71,11 @@ Para remover a instância do Get: | @@ -71,11 +71,11 @@ Para remover a instância do Get: | ||
71 | Get.delete<Controller>(); | 71 | Get.delete<Controller>(); |
72 | ``` | 72 | ``` |
73 | 73 | ||
74 | -## Opções | 74 | +## Métodos de instanciamento. |
75 | 75 | ||
76 | -Quando você usa Get.put, lazyPut e putAsync, existe algumas opções que você pode alterar se quiser | 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 | 77 | ||
78 | -- No Get.put(): | 78 | +- Get.put(): |
79 | 79 | ||
80 | ```dart | 80 | ```dart |
81 | Get.put<S>( | 81 | Get.put<S>( |
@@ -95,17 +95,12 @@ Get.put<S>( | @@ -95,17 +95,12 @@ Get.put<S>( | ||
95 | // padrão: false | 95 | // padrão: false |
96 | bool permanent = false, | 96 | bool permanent = false, |
97 | 97 | ||
98 | - // opcional: permite que depois de usar uma classe abstrata num teste, | ||
99 | - // trocar por outra e continuar com o teste | ||
100 | - // padrão: false | ||
101 | - bool overrideAbstract = false, | ||
102 | - | ||
103 | // opcional: permite criar a dependência usando uma função em vez da dependênia em si | 98 | // opcional: permite criar a dependência usando uma função em vez da dependênia em si |
104 | FcBuilderFunc<S> builder, | 99 | FcBuilderFunc<S> builder, |
105 | ) | 100 | ) |
106 | ``` | 101 | ``` |
107 | 102 | ||
108 | -- No Get.lazyPut: | 103 | +- Get.lazyPut: |
109 | 104 | ||
110 | ```dart | 105 | ```dart |
111 | Get.lazyPut<S>( | 106 | Get.lazyPut<S>( |
@@ -126,7 +121,7 @@ Get.lazyPut<S>( | @@ -126,7 +121,7 @@ Get.lazyPut<S>( | ||
126 | ) | 121 | ) |
127 | ``` | 122 | ``` |
128 | 123 | ||
129 | -- No Get.putAsync: | 124 | +- Get.putAsync: |
130 | 125 | ||
131 | ```dart | 126 | ```dart |
132 | Get.putAsync<S>( | 127 | Get.putAsync<S>( |
@@ -143,6 +138,44 @@ Get.putAsync<S>( | @@ -143,6 +138,44 @@ Get.putAsync<S>( | ||
143 | bool permanent = false | 138 | bool permanent = false |
144 | ``` | 139 | ``` |
145 | 140 | ||
141 | +- Get.create: | ||
142 | + | ||
143 | +```dart | ||
144 | +Get.create<S>( | ||
145 | + // 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 | + FcBuilderFunc<S> builder, | ||
148 | + | ||
149 | + // opcional: igual ao Get.put(), mas é usado quando você precisa de múltiplas instâncias de uma mesma classe. | ||
150 | + // Útil caso você tenha uma lista em que cada item precise de um controller próprio | ||
151 | + // precisa ser uma string única. Apenas mudou o nome de tag para name. | ||
152 | + String name, | ||
153 | + | ||
154 | + // opcional: igual ao Get.put(), usado quando você precisa manter a instância ativa no app inteiro. A diferença | ||
155 | + // é que com Get.create o permanent está habilitado por padrão | ||
156 | + bool permanent = true | ||
157 | +``` | ||
158 | + | ||
159 | +### Diferenças entre os métodos: | ||
160 | + | ||
161 | +Primeiramente, vamos falar das variáveis `_factory` e `_singl`. Ambas são essenciais no processo de criação e uso de suas dependências, pois é através delas que podemos armazenar, apagar, recriar nossas instâncias. | ||
162 | + | ||
163 | +Primeiro, vamos falar do `fenix` do Get.lazyPut e o `permanent` dos outros métodos. | ||
164 | + | ||
165 | +- O `fenix` diz respeito ao armazenamento da instância. Quando você manipula os parâmetros `fenix` ou `smartManagement` para não perder as instâncias da sua dependência, elas serão salvas na para serem chamadas posteriormente. | ||
166 | + | ||
167 | +- O `permanent` diz respeito ao uso. Se a instância permanece ativa, ou se é apagada, quando não está em uso na tela. | ||
168 | + | ||
169 | +A diferença fundamental entre `permanent` e `fenix` está em como você quer armazenar as suas instâncias. Reforçando: por padrão, o Get apaga as instâncias quando elas não estão em uso (Digamos que a tela 1 tenha o controlador A e tela 2, controlador B. Ao mover-se de 1 para 2, o controlador A perde o uso e portanto é apagado), mas se você optar por algo `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. 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. | ||
170 | + | ||
171 | +Prosseguindo com as diferenças entre os métodos: | ||
172 | + | ||
173 | +- Get.put e Get.putAsync seguem a mesma ordem de criação, com a diferença que o Async opta por aplicar um método assíncrono: Esses dois métodos criam e já inicializam a instância. Esta é inserida diretamente na memória, através do método interno `insert` com os parâmetros `permanent: false` e `isSingleton: true` (esse parâmetro `isSingleton` serve apenas para dizer se é para utilizar a dependência colocada em `dependency`, ou se é para usar a dependência colocada no `FcBuilderFunc`). Depois disso, é chamado o `Get.find` que imediatamente inicializa as instâncias que estão na memória. | ||
174 | + | ||
175 | +- Get.create: Como o nome indica, você vai "criar" a sua dependência! Similar ao `Get.put`, ela também chama o método interno `insert` para instanciamento. Contudo, `permanent` e `isSingleton` passam a ser `true` e `false` (Como estamos "criando" a nossa dependência, não tem como ela ser um Singleton de algo, logo, `false`). E por ser `permanent: true`, temos por padrão o benefício de não se perder entre telas! Além disso, não é chamado o `Get.find`, logo ela fica esperando ser chamada para ser usada. Ele é criado dessa forma para aproveitar o uso do parâmetro `permanent`, já que, vale ressaltar, o Get.create foi criado com o objetivo de criar instâncias não compartilhadas, mas que não se perdem, como por exemplo um botão em um listView, que você quer uma instância única para aquela lista - por conta disso, o Get.create deve ser usado em conjunto com o GetWidget. | ||
176 | + | ||
177 | +- Get.lazyPut: Como o nome dá a entender, é um processo preguiçoso (lazy). A instância é criada, mas ela não é chamada para uso logo em seguida, ela fica aguardando ser chamada. Diferente dos outros métodos, o `insert` não é chamado. Ao invés disso, a instância é inserida em outra parte na memória, uma parte responsável por dizer se a instância pode ser recriada ou não, vamos chamá-la de "fábrica". Se queremos criar algo para ser chamado só depois, não vamos misturá-lo com as coisas que estão sendo usadas agora. E é aqui que entra a mágica do `fenix`. Se você optou por deixar `fenix: false`, e seu `smartManagement` não for `keepFactory`, então ao usar o `Get.find` a instância passa da "fábrica" para a área comum das instância. Em seguinda, por padrão é removida da "fábrica". Agora, se você optou por `fenix: true`, a instância continua a existir nessa parte dedicada, mesmo indo para a área comum, para ser chamada futuramente caso precise. | ||
178 | + | ||
146 | ## Bindings | 179 | ## Bindings |
147 | 180 | ||
148 | Um dos grandes diferenciais desse package, talvez, seja a possibilidade de integração total com rotas, gerenciador de estado e gerenciador de dependências. | 181 | 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