StateNotifierProvider<T extends StateNotifier<Object>> class

Creates a StateNotifier and expose 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 (todo.id != todoId) todo,
    ];
  }

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

Which you can then pass to a StateNotifierProvider like so:

final todosProvider = StateNotifierProvider((ref) => TodosNotifier());

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

Widget build(BuildContext context, ScopedReader watch) {
  // rebuild the widget when the todo list changes
  List<Todo> todos = watch(todosProvider.state);

  return ListView(
    children: [
      for (final todo in todos)
        CheckboxListTile(
           value: todo.completed,
           // When tapping on the todo, change its completed status
           onChanged: (value) => context.read(todosProvider).toggle(todo.id),
           title: Text(todo.description),
        ),
    ],
  );
}
Inheritance
Available Extensions
Annotations

Constructors

StateNotifierProvider(Create<T, ProviderReference> create, {String name})
Creates a StateNotifier and expose its current state. [...]

Properties

argument Object
If this provider was created with the .family modifier, argument is variable used.
read-only, inherited
from Family<dynamic, dynamic, dynamic, ProviderReference, RootProvider>
If this provider was created with the .family modifier, from is the .family instance.
read-only, inherited
hashCode int
The hash code for this object. [...]
@nonVirtual, read-only, inherited
name String
{@template riverpod.name} A custom label for providers. [...]
final, inherited
runtimeType Type
A representation of the runtime type of the object.
read-only, inherited

Methods

createElement() → ProviderElement<T, T>
An internal method that defines how a provider behaves.
inherited
createState() → _ProviderState<T>
An internal method that creates the state of a provider.
inherited
noSuchMethod(Invocation invocation) → dynamic
Invoked when a non-existent method or property is accessed. [...]
inherited
overrideWithProvider(RootProvider<Object, T> provider) → ProviderOverride
Overrides the behavior of this provider with another provider. [...]
inherited
overrideWithValue(T value) Override
Overrides the behavior of a provider with a value. [...]
inherited
select<Selected>(Selected selector(T value)) ProviderListenable<Selected>
Partially listen to a provider. [...]
inherited
toString() String
Returns a string representation of this object.
inherited

Operators

operator ==(Object other) bool
The equality operator. [...]
inherited

Constants

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