Temos que conversar sobre o InheritedWidget #16
Replies: 8 comments 9 replies
-
Então acho que sua colocação está perfeita, única questão seria como podemos resolver a parte dos escopos/módulos, já que quando empurramos uma nova rota, por exemplo, perdemos o acesso ao Ou até mesmo "levar" todos os dados capturados dos |
Beta Was this translation helpful? Give feedback.
-
Acho que o Provider faz um pouco disso ou é o que chaga mais perto. Visto que voce so consegue recuperar as instancias pelo contexto, e apenas naquele escopo. Claro que se o Desenvolvedor colocar tudo pra ser injetado no main isso sera global. Eu nao sei como seria a forma ideal de se fazer isso da forma correta, mas confesso que as vezes realmente vira uma enorme bagunca, quando nao se tem limites e em todo lugar se pode recuperar uma instancia de seu controller |
Beta Was this translation helpful? Give feedback.
-
Outro ponto que sinto falta, não sei se o |
Beta Was this translation helpful? Give feedback.
-
@jacobaraujo7 talvez seja muito básica a minha duvida, mas no quesito ciclo de vida da dependência, como ficam os binds factory, lazySingleton? Digamos, caso eu adicione um factory como dependência de um InheritedNotifier na raiz, ele viraria um singleton para aquele widget? Pois a resolução da dependência é feita no construtor? Outro caso se um factory é usado como dependência de um lazySingleton ele vira singleton naquele contexto também, certo? E para manter uma sinergia com o Modular, eu precisaria iniciar o uso dos InheritedNotifier a partir do primeiro Child do ModularApp, desta forma o primeiro modulo está carregado? Tenho usado à algum tempo Modular em prod, mas sempre venho buscando formas de melhorar a performance. Dito isto, enquanto escrevia esta duvida, comecei a perceber que as vezes tenho declarado minhas dependências de forma errada 🥲. |
Beta Was this translation helpful? Give feedback.
-
Só fato de de ter/garantir o hotReload e melhorar os testes, já é uma grande vantagem. O fato de existir alguns pacotes que tentam resolver isso por fora da árvore de elementos/widgets me leva a pensar em que: |
Beta Was this translation helpful? Give feedback.
-
Cara fantástico isso, por que seguir o fluxo de dados que originalmente o flutter foi criado para ter é algo que realmente a galera não olhava, e foi muito bom o vídeo por que me fez entender sobre toda essa arvore e por que ela é importante, showww ótimo conteúdo. |
Beta Was this translation helpful? Give feedback.
-
Achei interessante a ideia de propagar o IoC pela arvore, fiz um teste aqui no meu código, e funciona. Porém, tenho usado as
Existe a possibilidade do Triple disponibilizar algo nesse estilo futuramente? |
Beta Was this translation helpful? Give feedback.
-
Achei muito bom mas gerou me dúvidas. se eu fizer uma classe sendo InheritedWidget para envolver meu MaterialApp `class ControllerGeral extends InheritedWidget{ ControllerGeral ({Key? key, required Widget child}) final Page1Controller pag1 = Page1Controller (); em seguida aplico este controller geral na raiz
Faço a injeção pelo contexto em cada página conforme seu controller. Até ai ok. Minha dúvida: estas instãncias na classe do ControllerGeral InheritedWigte (Page1Controller (), Page2Controller () ... etc) ao serem acionadas não ficam ocupando memória já que não são lazy? Hoje uso o GetIt para injeção de dependência. |
Beta Was this translation helpful? Give feedback.
-
Precisamos conversar sobre InheritedWidget Click aqui se ainda não assistiu.
Minha opnião:
Deixa eu explicar:
Pegue como exemplo o Provider, GetIt ou Modular, todos resolvem a criação da Instancia (IoC) e, por ser objetos singletons acabam sendo consumidos em qualquer lugar do App (Widgets ou dentro de outros serviços) e eu não concordo com isso.
Acredito que a resolução da instancia deveria acontecer por esses packages mas a propagação deveria ser diretamente pela árvore de Widget com o InheritedWidget.
Acabamos não usando o InheritedWidget por não sentir a necessidade, já que todos os nossos controllers são singleton`s e podem ser recuperados em qualquer lugar.
Porém, se impedíssimo que essas instâncias resolvidas fosse recuperadas em qualquer lugar teriamos mais limites.
Essa falta de limites abre um precedente muito perigoso por injetar coisas que não estão na árvore, perdendo o track e não respondendo a coisas como Hot Reload.
Eu sinto que ignoramos muitas coisas da arquitetura do Flutter por pensar em facilidades, o que me leva a pensar: Será que não deveriamos respeitar mais a árvore de widgets do Flutter?
Me diz sua opnião ai!
Beta Was this translation helpful? Give feedback.
All reactions