Created
August 30, 2023 22:00
-
-
Save uxjp/7984d41cdf7e9735286b2cdb33fe430a to your computer and use it in GitHub Desktop.
Flutter - setState() called after dispose()
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
A solução que consegui encontrar para `setState() called after dispose()` foi justamente validar usando `mounted`. | |
Pelo que pesquisei já foi até sugestão de issue o setState checar o `mounted` por default. https://github.com/flutter/flutter/issues/107070 | |
Em um app com multiplas telas dados são carregados assincronamente, em alguns casos widgets estão fechados(unmounted - fora da árvore de widgets) | |
antes dos dados serem carregados completamente. Se um `setState` é executado em um `widget` que não está mais na tela teremos um erro. | |
Pode ocorrer de fluxos de outros widgets não apresentem erro. Entretanto não deixar um check para o `mounted` | |
deixa esse potencial ponto de falha em um widget que pode ser usado em várias partes do App. | |
https://api.flutter.dev/flutter/widgets/State/setState.html | |
setState notifica o Framework que o estado do Widget mudou a partir das mudanças no estado do Widget a parte da tela pertinente é reconstruida. | |
Já que os widgets são imutáveis toda vez que um Widget é modificado ele é removido da árvore e um novo é colocado no lugar e a porção da | |
tela modificada é redesenhada. | |
Abordagem "reconstruir em vez de modificar". | |
A reconstrução é feita de maneira recursiva na arvore de widgets, comparando a nova representação com a anterior e fazendo a substituição caso | |
houver diferença. | |
Não faz sentido tentar setar o estado de um Widget que não existe na Widget Tree, e logo não aparecerá em tela. | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment