Skip to main content

List of state management approaches

State management is a complex topic. If you feel that some of your questions haven't been answered, or that the approach described on these pages is not viable for your use cases, you are probably right.

Learn more at the following links, many of which have been contributed by the Flutter community:

General overview

#

Things to review before selecting an approach.

Provider

#

Riverpod

#

Riverpod works in a similar fashion to Provider. It offers compile safety and testing without depending on the Flutter SDK.

setState

#

The low-level approach to use for widget-specific, ephemeral state.

ValueNotifier & InheritedNotifier

#

An approach using only Flutter provided tooling to update state and notify the UI of changes.

InheritedWidget & InheritedModel

#

The low-level approach used to communicate between ancestors and children in the widget tree. This is what provider and many other approaches use under the hood.

The following instructor-led video workshop covers how to use InheritedWidget:


How to manage application state using inherited widgets

Other useful docs include:

June

#

A lightweight and modern state management library that focuses on providing a pattern similar to Flutter's built-in state management.

Redux

#

A state container approach familiar to many web developers.

Fish-Redux

#

Fish Redux is an assembled flutter application framework based on Redux state management. It is suitable for building medium and large applications.

BLoC / Rx

#

A family of stream/observable based patterns.

GetIt

#

A service locator based state management approach that doesn't need a BuildContext.

MobX

#

A popular library based on observables and reactions.

Dart Board

#

A modular feature management framework for Flutter. Dart Board is designed to help encapsulate and isolate features, including examples/frameworks, small kernel, and many ready-to-use decoupled features such as debugging, logging, auth, redux, locator, particle system and more.

Flutter Commands

#

Reactive state management that uses the Command Pattern and is based on ValueNotifiers. Best in combination with GetIt, but can be used with Provider or other locators too.

Binder

#

A state management package that uses InheritedWidget at its core. Inspired in part by recoil. This package promotes the separation of concerns.

GetX

#

A simplified reactive state management solution.

states_rebuilder

#

An approach that combines state management with a dependency injection solution and an integrated router. For more information, see the following info:

Triple Pattern (Segmented State Pattern)

#

Triple is a pattern for state management that uses Streams or ValueNotifier. This mechanism (nicknamed triple because the stream always uses three values: Error, Loading, and State), is based on the Segmented State pattern.

For more information, refer to the following resources:

solidart

#

A simple but powerful state management solution inspired by SolidJS.

flutter_reactive_value

#

The flutter_reactive_value library might offer the least complex solution for state management in Flutter. It might help Flutter newcomers add reactivity to their UI, without the complexity of the mechanisms described before. The flutter_reactive_value library defines the reactiveValue(BuildContext) extension method on ValueNotifier. This extension allows a Widget to fetch the current value of the ValueNotifier and subscribe the Widget to changes in the value of the ValueNotifier. If the value of the ValueNotifier changes, Widget rebuilds.

Elementary

#

Elementary is a simple and reliable way to build applications with MVVM in Flutter. It offers a pure Flutter experience with clear code separation by responsibilities, efficient rebuilds, easy testability, and enhancing team productivity.