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:
Things to review before selecting an approach.
- Introduction to state management, which is the beginning of this very section (for those of you who arrived directly to this Options page and missed the previous pages)
- Pragmatic State Management in Flutter, a video from Google I/O 2019
- Flutter Architecture Samples, by Brian Egan
A recommended approach.
- Simple app state management, the previous page in this section
- Provider package
- You might not need Redux: The Flutter edition, by Ryan Edge
- Making sense of all those Flutter Providers
The low-level approach to use for widget-specific, ephemeral state.
- Adding interactivity to your Flutter app, a Flutter tutorial
- Basic state management in Google Flutter, by Agung Surya
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.
- InheritedWidget docs
- Managing Flutter Application State With InheritedWidgets, by Hans Muller
- Inheriting Widgets, by Mehmet Fidanboylu
- Using Flutter Inherited Widgets Effectively, by Eric Windmill
- Widget - State - Context - InheritedWidget, by Didier Bolelens
A state container approach familiar to many web developers.
- Animation Management with Redux and Flutter, a video from DartConf 2018 Accompanying article on Medium
- Flutter Redux package
- Redux Saga Middleware Dart and Flutter, by Bilal Uslu
- Introduction to Redux in Flutter, by Xavi Rigau
- Flutter + Redux—How to make a shopping list app, by Paulina Szklarska on Hackernoon
- Building a TODO application (CRUD) in Flutter with Redux—Part 1, a video by Tensor Programming
- Flutter Redux Thunk, an example, by Jack Wong
- Building a (large) Flutter app with Redux, by Hillel Coren
- Fish-Redux–An assembled flutter application framework based on Redux, by Alibaba
- Async Redux–Redux without boilerplate. Allows for both sync and async reducers, by Marcelo Glasberg
- Flutter meets Redux: The Redux way of managing Flutter applications state, by Amir Ghezelbash
- Redux and epics for better-organized code in Flutter apps, by Nihad Delic
Fish Redux is an assembled flutter application framework based on Redux state management. It is suitable for building medium and large applications.
- Fish-Redux-Library package, by Alibaba
- Fish-Redux-Source, project code
- Flutter-Movie - Non-trivial example demonstrating how to use Fish Redux, with more than 30 screens, graphql, payment api and media player.
BLoC / Rx
A family of stream/observable based patterns.
- Architect your Flutter project using BLoC pattern, by Sagar Suri
- BloC Library, by Felix Angelov
- Reactive Programming - Streams - BLoC - Practical Use Cases, by Didier Boelens
A service locator based state management approach that doesn’t need a
- GetIt package, the service locator. It can also be used together with BloCs.
GetIt Mixin package, a mixin that completes
GetItto a full state management solution.
GetIt Hooks package, same as the mixin in case you already use
A popular library based on observables and reactions.
- MobX.dart, Hassle free state-management for your Dart and Flutter apps
- Getting started with MobX.dart
- Flutter: State Management with Mobx, a video by Paul Halliday
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.