ChangeNotifierProvider<NotifierT extends ChangeNotifier?> class
final
Creates a ChangeNotifier
and exposes its current state.
Combined with ChangeNotifier
, ChangeNotifierProvider 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 ChangeNotifier
, you could represent such state as:
class TodosNotifier extends ChangeNotifier {
List<Todo> todos = [];
void add(Todo todo) {
todos.add(todo);
notifyListeners();
}
void remove(String todoId) {
todos.removeWhere((todo) => todo.id == todoId);
notifyListeners();
}
void toggle(String todoId) {
final todo = todos.firstWhere((todo) => todo.id == todoId);
todo.completed = !todo.completed;
notifyListeners();
}
}
Which you can then pass to a ChangeNotifierProvider like so:
final todosProvider = ChangeNotifierProvider<TodosNotifier, List<Todo>>((ref) => TodosNotifier());
And finally, you can interact with it inside your UI:
Component build(BuildContext context) {
// rebuild the widget when the todo list changes
List<Todo> todos = context.watch(todosProvider).todos;
return div([
for (final todo in todos)
CheckboxListTile(
value: todo.completed,
// When tapping on the todo, change its completed status
onChanged: (value) => context.read(todosProvider.notifier).toggle(todo.id),
title: Text(todo.description),
),
]);
}
- Inheritance
-
- Object
- ProviderOrFamily
- ProviderBase<
NotifierT> - ChangeNotifierProvider
- Annotations
-
- @publicInLegacy
Constructors
-
ChangeNotifierProvider.new(NotifierT _createFn(Ref ref), {String? name, Iterable<
ProviderOrFamily> ? dependencies, bool isAutoDispose = false, Retry? retry}) -
Creates a
ChangeNotifier
and exposes its current state.
Properties
- argument → Object?
-
If this provider was created with the
.family
modifier, argument is the variable that was used.finalinherited -
dependencies
→ Iterable<
ProviderOrFamily> ? -
The list of providers that this provider potentially depends on.
finalinherited
- from → Family?
-
If this provider was created with the
.family
modifier, from is the.family
instance.finalinherited - hashCode → int
-
The hash code for this object.
no setterinherited
- isAutoDispose → bool
-
Whether the state associated to this provider should be disposed
automatically when the provider stops being listened.
finalinherited
- name → String?
-
A custom label for providers.
finalinherited
-
notifier
→ Refreshable<
NotifierT> -
Obtains the
ChangeNotifier
associated with this provider, without listening to state changes.no setter - retry → Retry?
-
The retry strategy to use when a provider fails.
finalinherited
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
Methods
-
create(
Ref ref) → NotifierT - @nodoc
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
overrideWith(
Create< NotifierT> create) → Override -
Override the provider with a new initialization function.
inherited
-
toString(
) → String -
A string representation of this object.
inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited
Constants
- autoDispose → const AutoDisposeChangeNotifierProviderBuilder
- Marks the provider as automatically disposed when no longer listened to.
- family → const ChangeNotifierProviderFamilyBuilder
- A group of providers that builds their value from an external parameter.