StateNotifierProvider<NotifierT extends StateNotifier<T>, T> class

Creates a StateNotifier and exposes its current state.

This provider is used in combination with package:state_notifier.

Combined with StateNotifier, StateNotifierProvider can be used to manipulate advanced states, that would otherwise be difficult to represent with simpler providers such as Provider or FutureProvider.

For example, you may have a todo-list, where you can add and remove and complete a todo. Using StateNotifier, you could represent such state as:

class TodosNotifier extends StateNotifier<List<Todo>> {
  TodosNotifier(): super([]);

  void add(Todo todo) {
    state = [...state, todo];

  void remove(String todoId) {
    state = [
      for (final todo in state)
        if ( != todoId) todo,

  void toggle(String todoId) {
    state = [
      for (final todo in state)
        if ( == todoId) todo.copyWith(completed: !todo.completed),

Which you can then pass to a StateNotifierProvider like so:

final todosProvider = StateNotifierProvider<TodosNotifier, List<Todo>>((ref) => TodosNotifier());

And finally, you can interact with it inside your UI:

Widget build(BuildContext context, WidgetRef ref) {
  // rebuild the widget when the todo list changes
  List<Todo> todos =;

  return ListView(
    children: [
      for (final todo in todos)
           value: todo.completed,
           // When tapping on the todo, change its completed status
           onChanged: (value) =>,
           title: Text(todo.description),
Mixed in types
Available Extensions


StateNotifierProvider(NotifierT _createFn(StateNotifierProviderRef<NotifierT, T> ref), {String? name, Iterable<ProviderOrFamily>? dependencies, @Deprecated('Will be removed in 3.0.0') Family<Object?>? from, @Deprecated('Will be removed in 3.0.0') Object? argument, @Deprecated('Will be removed in 3.0.0') DebugGetCreateSourceHash? debugGetCreateSourceHash})
Creates a StateNotifier and exposes its current state.
StateNotifierProvider.internal(NotifierT _createFn(StateNotifierProviderRef<NotifierT, T> ref), {required String? name, required Iterable<ProviderOrFamily>? dependencies, required Iterable<ProviderOrFamily>? allTransitiveDependencies, required DebugGetCreateSourceHash? debugGetCreateSourceHash, Family<Object?>? from, Object? argument})
An implementation detail of Riverpod


allTransitiveDependencies Iterable<ProviderOrFamily>?
All the dependencies of a provider and their dependencies too.
argument Object?
If this provider was created with the .family modifier, argument is the variable that was used.
debugGetCreateSourceHash → DebugGetCreateSourceHash?
A debug-only fucntion for obtaining a hash of the source code of the initialization function.
dependencies Iterable<ProviderOrFamily>?
The list of providers that this provider potentially depends on.
from Family<Object?>?
If this provider was created with the .family modifier, from is the .family instance.
hashCode int
The hash code for this object.
no setterinherited
name String?
A custom label for providers.
notifier AlwaysAliveRefreshable<NotifierT>
Obtains the StateNotifier associated with this provider, without listening to state changes.
runtimeType Type
A representation of the runtime type of the object.
no setterinherited


addListener(Node node, void listener(T? previous, T next), {required void onError(Object error, StackTrace stackTrace)?, required void onDependencyMayHaveChanged()?, required bool fireImmediately}) ProviderSubscription<T>
Starts listening to this transformer
createElement() StateNotifierProviderElement<NotifierT, T>
An internal method that defines how a provider behaves.
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
overrideWith(Create<NotifierT, StateNotifierProviderRef<NotifierT, T>> create) Override
Override the provider with a new initialization function.
read(Node node) → T
Obtains the result of this provider expression without adding listener.
select<Selected>(Selected selector(T value)) AlwaysAliveProviderListenable<Selected>
Partially listen to a provider.
toString() String
A string representation of this object.


operator ==(Object other) bool
The equality operator.


autoDispose → const AutoDisposeStateNotifierProviderBuilder
Marks the provider as automatically disposed when no longer listened to.
family → const StateNotifierProviderFamilyBuilder
A group of providers that builds their value from an external parameter.