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 from the following resources, many of which have been contributed by the Flutter community.

General overview

#

Things to review before selecting an approach.

Built-in approaches

#

setState

#

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

ValueNotifier and InheritedNotifier

#

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

InheritedWidget and InheritedModel

#

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

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

Watch on YouTube in a new tab: "How to manage application state using inherited widgets"

Other useful docs include:

Community-provided packages

#

Depending on the complexity of your app and preferences of your team, you might find adopting a state management package useful. State management packages often help reduce boilerplate code, provide specialized debugging tools, and can help enable a clearer and consistent application architecture.

The Flutter community offers a wide variety of state management packages. The best choice for your app often depends on the app's complexity, your team's preferences, and the specific problems you need to solve.

To begin exploring the available options, check out the #state-management topic on the pub.dev site and refine the search to find packages that match your needs.