Flutter: setState() called after dispose(): _MyState#1a2b3 (lifecycle state: defunct, not mounted)
An async callback (network, timer, stream) finished after the widget was removed and then called setState.
setState() called after dispose()lifecycle state: defunct, not mountedThis error happens if you call setState() on a State object for a widget that no longer appears in the widget tree Meaning
Await the future, then check mounted before setState; cancel timers, animations and stream subscriptions in dispose().
Common causes
- Future completes after navigating away
- Timer/StreamSubscription not cancelled in dispose
- AnimationController not disposed
⚡ Quick fix
- if (!mounted) return; before setState
- Cancel subscriptions/timers in dispose()
- Move async state to a state-management solution
Detailed fix by platform
Dart
- dart
Future<void> load() async { final data = await api.fetch(); if (!mounted) return; setState(() => items = data); }
How to diagnose
- Callback — Which async task?
- Dispose — Subscriptions cancelled?
🔧 Still not fixed?
Many errors look alike. If the steps above didn’t solve it, one of these is probably what you’re facing:
Similar errors
Other ways to find it
Where this error sits
Origin: On your device. Errors that are often confused with or caused by this one (click to open):
🧠 Still stuck? Analyze your error
Paste the full message, response headers or stack trace — we'll detect the platform and point to the most likely cause.
💬 What worked for others
No tips yet — did something else fix this for you?
Share what worked for you
Tips are checked by an editor before they appear. Links are removed.
Report a correction or suggest an improvement
Last updated 15 Oct 2026