modular
modular copied to clipboard
Módulo nunca é descartado ao usar RouterOutlet
Describe the bug Quando utilizado o RouterOutlet para nevegação de módulos ou rotas internas, o módulo (pai) nunca é disposado ao navegar entre as rotas internas. Ou seja, caso haja navegação para o módulo que contenha o RouterOutlet e faça o retorno imediato, há o dispose do módulo todo. Caso entre, navegue entre rotas internas e depois saia completamente do módulo, ele sempre ficará ativo (o modulo pai).
No miniprojeto zipado não contem nenhuma dependência, porém no projeto que está em produção na minha empresa há e elas permanecem ativas em toda aplicação.
Environment
[√] Flutter (Channel stable, 3.13.2, on Microsoft Windows [versÆo 10.0.19045.3324], locale pt-BR)
[√] Windows Version (Installed version of Windows is version 10 or higher)
[√] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
[X] Chrome - develop for the web (Cannot find Chrome executable at .\Google\Chrome\Application\chrome.exe)
! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
[√] Android Studio (version 2022.2)
[√] VS Code (version 1.81.1)
[√] Connected device (2 available)
[√] Network resources
To Reproduce module.zip
Expected behavior Ao sair do módulo pai, ele deve ter o disposed.
Screenshots
Do login para a home1 (sub modulo da homeModulo)
Ao voltar para a login diretamente
Quando eu navego entre os módulos internos
Porém, quando eu tento voltar para o login: (Houve disposed no sub modulo mas o pai ficou ativo)
O RouterOutlet() deve ser um componente na View, na sua rota no r.child, tenta por uma página ao invés do RouterOutlet() e add no scaffold da pagina.
O RouterOutlet() deve ser um componente na View, na sua rota no r.child, tenta por uma página ao invés do RouterOutlet() e add no scaffold da pagina.
No projeto que eu descobri o problema estava exatamente da forma que você citou. No exemplo usei o RouterOutlet() direto no Module apenas para facilitar
Eu encontrei esse problema tbm, quando você entra no módulo principal do RouterOutlet sem navegar entre os módulos/rotas filhos e sai para o módulo login por exemplo o dispose do módulo principal do RouterOutlet é feito, porém se navegar internamente nos módulos filho, só esses são disposed e o do módulo principal do RouterOutlet não. Senhores, @jacobaraujo7, @Bwolfs2, tem alguém olhando isso? Obrigado
Eu encontrei esse problema tbm, quando você entra no módulo principal do RouterOutlet sem navegar entre os módulos/rotas filhos e sai para o módulo login por exemplo o dispose do módulo principal do RouterOutlet é feito, porém se navegar internamente nos módulos filho, só esses são disposed e o do módulo principal do RouterOutlet não. Senhores, @jacobaraujo7, @Bwolfs2, tem alguém olhando isso? Obrigado
Acabei encontrando o mesmo problema em qualquer tipo de navegação entre rotas filhas. Parece que o problema não é específico do RouterOutlet.
Olá @GuilhermeVVeiga @migdev-br Eu fiz um um pull request #911 para resolver esse problema e está aguardando análise. Por favor, se puderem testar a solução e colocar um comentário no pull request, eu agradeceria.
Para testar, como a alteração é referente ao modular_core, acrescente isso ao seu pubspec (não precisa alterar a dependência flutter_modular
):
dependency_overrides:
modular_core:
git:
url: https://github.com/eduardoflorence/modular.git
ref: module_not_dispose
path: modular_core