setState called from outside State class

Undefined name 'setState'.

Quick Answer

setState is only available inside a State class of a StatefulWidget.

Why This Happens

In Dart, setState is a method defined on the State class. Calling it from a StatelessWidget, a helper function, or another class results in an undefined name error. Convert to a StatefulWidget or use a state management solution.

The Problem

class MyWidget extends StatelessWidget {
  int counter = 0;
  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: () => setState(() => counter++), // Not a State!
      child: Text('$counter'),
    );
  }
}

The Fix

class MyWidget extends StatefulWidget {
  @override
  State<MyWidget> createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  int counter = 0;
  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: () => setState(() => counter++),
      child: Text('$counter'),
    );
  }
}

Step-by-Step Fix

  1. 1

    Identify the error

    Look at the error: Undefined name 'setState'. This means setState was called outside a State class.

  2. 2

    Find the cause

    Check if the widget extends StatelessWidget instead of StatefulWidget, or if setState is called from a non-State class.

  3. 3

    Apply the fix

    Convert the widget to a StatefulWidget with a proper State class, or use a state management library.

Bugsly catches this automatically

Bugsly's AI analyzes this error pattern in real-time, explains what went wrong in plain English, and suggests the exact fix — before your users even report it.

Try Bugsly free