Closed Gustav0ar closed 4 years ago
Just to add, your suggestion to use popUntil works.
Eg: Modular.to.popUntil(ModalRoute.withName("/"));
@jacobaraujo7 For what reason did you close the issue? I didn't see any commit / PR about fixing this issue. popUntil does not solve all the cases, because it needs to a route that is in the stack for it to work. In case I want to navigate to another different route, it won't solve the issue.
Por qual motivo fechou o problema? Eu não vi nenhum commit / PR sobre a correção deste problema. popUntil não resolve para todas as situações, pq o problema vai persistir caso queria navegar para uma rota que não está na pilha de navegação.
Eu ia falar no privado. Mas n tem problema a ser corrigido. Quando vc faz o pusReplacement ele apenas sobreescreve a rota anterior, ou seja, a rota A push B pushReplacement para a C, a arvore vai ficar. A e C
Vc pode usar outras ferramentas como ReplacementAndPopUntil, ou qualquer outra ferramenta que tenha Until.
Desculpe se fechei abruptamente, problemas com o LATAM Roadshow e n conseguir chamar no PV.
Outra coisa q o PushReplacement nao seve para voltar, ele cria uma nova tela e sobrescreve a anterior:
Ah blz, mas o modular não deveria ser "inteligente" para quando navega para uma rota fora do módulo ele automaticamente dar dispose para evitar memory leak e outros problemas?
Mas vc ainda está dentro do módulo, a rota new ainda existe
Estou falando quando navega para outro módulo com o pushReplacement, que na prática não teria como voltar para o módulo que você estava. Ou seja, teria que dar dispose para não ter problemas...
Exemplo do que eu estou falando: Estou inicio no módulo A que tem rota "/" Depois vou para o módulo B na rota "/moduloB" Depois quero navegar para o módulo C na rota "/moduloC" sem poder voltar para o módulo B. Como faço isso dando dispose no Módulo B?
Ai vc faz o replacement normalmente. Nesse caso vai funcioonar. No seu exemplo vc tinha uma rota a mais, ai faz o replacement, entao o modulo ainda existe. Veja o vídeo sobre navegação, existe varias funcionalidades no navigation pra isso. Mas realmente a gente trabalha respeitando o sistema de rotas do flutter.
@jacobaraujo7 vou fechar este issue. Realmente eu estava equivocado. Não é o Modular que deve se preocupar em chamar o dispose, o próprio Flutter já faz isso automaticamente quando se usa corretamente. Eu não tinha entendido direito o esquema de rotas e fiz uma confusão aqui. Para mim o pushReplacement limpava toda as rotas passadas, mas não, ele limpa só a última. O correto seria usar pushNamedAndRemoveUntil ou popUntil/pop. Eu corrigi aqui https://github.com/Gustav0ar/modular_route_bug e agora está funcionando corretamente.
Muito obrigado pelos esclarecimentos.
Can I ask if this was resolved? Im having a very similar issue where I use pushReplacementNamed and events are still being fired on the widget that should have been disposed. I dont speak portugese so its difficult to follow the conversation.
I guess this was solved, u can provide a sample app simulating this problem?
Estou tendo um problema parecido:
Porém se eu fizer o seguinte:
Like I talked to @jacobaraujo7 ,
The scenario is like this:
When executing step 4, it should dispose NewModule, but it never happens. That can cause issues when navigating back to NewModule. It only disposes correctly if I navigate to "/" inside the "/new" route (first route inside NewModule), if I try to navigate from 2+ page in stack, it doesn't dispose. You can test this scenario uncometing the line 24 inside new_page.dart
Minimal reproducible project: https://github.com/Gustav0ar/modular_route_bug