# Flutter: setState() or markNeedsBuild() called during build. This widget cannot be marked as needing to build because the framework is already in the process of building widgets

**Code:** `setState() or markNeedsBuild() called during build` · **Category:** Flutter / Dart · **Seen on:** Flutter

State was changed while Flutter was building widgets, for example calling `setState` or a notifier from inside `build`.

## Meaning

Calling `setState`, `notifyListeners()` or navigation inside `build` triggers another build mid-build. Move the work to `initState`, a post-frame callback (`WidgetsBinding.instance.addPostFrameCallback`), or an event handler. With Provider, defer notifications triggered from `build`.

## Common causes

- setState() or notifyListeners() called in build()
- Navigator.push in build
- Provider notifier updated during a child's build
- Controller listener calling setState while building
- FutureBuilder/StreamBuilder callback that mutates state

## Quick fix

1. Move the call to initState or an event handler
2. Wrap in `WidgetsBinding.instance.addPostFrameCallback((_) { … })`
3. Use `Future.microtask` for provider updates started in build

## Detailed fix by platform

### Flutter

1. `WidgetsBinding.instance.addPostFrameCallback((_) { if (mounted) setState(() => ready = true); });`

## How to diagnose

1. **Call** — setState/notifyListeners in build?
2. **Trigger** — Navigation/provider?
3. **Timing** — Need post-frame?

---
Source: [WhatIsMyError](https://whatismyerror.com/errors/flutter/setstate-called-during-build)
