ChangeNotifier class mixin

A class that can be extended or mixed in that provides a change notification API using VoidCallback for notifications.

It is O(1) for adding listeners and O(N) for removing listeners and dispatching notifications (where N is the number of listeners).

Using ChangeNotifier subclasses for data models

A data structure can extend or mix in ChangeNotifier to implement the Listenable interface and thus become usable with widgets that listen for changes to Listenables, such as ListenableBuilder.

The following example implements a simple counter that utilizes a ListenableBuilder to limit rebuilds to only the Text widget containing the count. The current count is stored in a ChangeNotifier subclass, which rebuilds the ListenableBuilder's contents when its value is changed.

To create a local project with this code sample, run:
flutter create --sample=foundation.ChangeNotifier.1 mysample

In this case, the ChangeNotifier subclass encapsulates a list, and notifies the clients any time an item is added to the list. This example only supports adding items; as an exercise, consider adding buttons to remove items from the list as well.

To create a local project with this code sample, run:
flutter create --sample=foundation.ChangeNotifier.2 mysample

See also:

Implemented types




hashCode int
The hash code for this object.
no setterinherited
hasListeners bool
Whether any listeners are currently registered.
no setter
runtimeType Type
A representation of the runtime type of the object.
no setterinherited


addListener(VoidCallback listener) → void
Register a closure to be called when the object changes.
dispose() → void
Discards any resources used by the object. After this is called, the object is not in a usable state and should be discarded (calls to addListener will throw after the object is disposed).
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
notifyListeners() → void
Call all the registered listeners.
removeListener(VoidCallback listener) → void
Remove a previously registered closure from the list of closures that are notified when the object changes.
toString() String
A string representation of this object.


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

Static Methods

debugAssertNotDisposed(ChangeNotifier notifier) bool
Used by subclasses to assert that the ChangeNotifier has not yet been disposed.
maybeDispatchObjectCreation(ChangeNotifier object) → void
Dispatches event of the object creation to FlutterMemoryAllocations.instance.