modular icon indicating copy to clipboard operation
modular copied to clipboard

Módulo nunca é descartado ao usar RouterOutlet

Open GuilhermeVVeiga opened this issue 1 year ago • 5 comments

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) image

Ao voltar para a login diretamente image

Quando eu navego entre os módulos internos image

Porém, quando eu tento voltar para o login: (Houve disposed no sub modulo mas o pai ficou ativo) image

GuilhermeVVeiga avatar Sep 11 '23 13:09 GuilhermeVVeiga

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.

migdev-br avatar Sep 11 '23 22:09 migdev-br

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

GuilhermeVVeiga avatar Sep 11 '23 23:09 GuilhermeVVeiga

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

migdev-br avatar Sep 25 '23 15:09 migdev-br

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.

GuilhermeVVeiga avatar Sep 25 '23 17:09 GuilhermeVVeiga

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

eduardoflorence avatar Oct 19 '23 18:10 eduardoflorence