Skip to content

Instantly share code, notes, and snippets.

@uxjp
Created August 30, 2023 22:00
Show Gist options
  • Save uxjp/7984d41cdf7e9735286b2cdb33fe430a to your computer and use it in GitHub Desktop.
Save uxjp/7984d41cdf7e9735286b2cdb33fe430a to your computer and use it in GitHub Desktop.
Flutter - setState() called after dispose()
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