setState() called after dispose() 🐦 Flutter / Dart

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

  1. if (!mounted) return; before setState
  2. Cancel subscriptions/timers in dispose()
  3. Move async state to a state-management solution

Detailed fix by platform

Dart

  1. dart
    Future<void> load() async {
      final data = await api.fetch();
      if (!mounted) return;
      setState(() => items = data);
    }

How to diagnose

  1. Callback — Which async task?
  2. 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:

🧠 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.