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.
Seen on:
Flutter
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
🧠 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.
Was this page helpful?
Report a correction or suggest an improvement
Last updated 7 Oct 2026