RestorableValue<T> class Null safety

A RestorableProperty that makes the wrapped value accessible to the owning State object via the value getter and setter.

Whenever a new value is set, didUpdateValue is called. Subclasses should call notifyListeners from this method if the new value changes what toPrimitives returns.

Using a RestorableValue

A StatefulWidget that has a restorable int property.
To create a local project with this code sample, run:
flutter create --sample=widgets.RestorableValue.1 mysample

Creating a subclass

This example shows how to create a new RestorableValue subclass, in this case for the Duration class.
class RestorableDuration extends RestorableValue<Duration> {
  Duration createDefaultValue() =>;

  void didUpdateValue(Duration? oldValue) {
    if (oldValue == null || oldValue.inMicroseconds != value.inMicroseconds) {

  Duration fromPrimitives(Object? data) {
    if (data != null) {
      return Duration(microseconds: data as int);

  Object toPrimitives() {
    return value.inMicroseconds;

See also:





enabled bool
Whether the object currently returned by toPrimitives should be included in the restoration state. [...]
read-only, inherited
hashCode int
The hash code for this object. [...]
read-only, inherited
hasListeners bool
Whether any listeners are currently registered. [...]
@protected, read-only, inherited
isRegistered bool
Whether this property is currently registered with a RestorationMixin.
@protected, read-only, inherited
runtimeType Type
A representation of the runtime type of the object.
read-only, inherited
state State<StatefulWidget>
The State object that this property is registered with. [...]
@protected, read-only, inherited
value ↔ T
The current value stored in this property. [...]
read / write


addListener(VoidCallback listener) → void
Register a closure to be called when the object changes. [...]
createDefaultValue() → T
Called by the RestorationMixin if no restoration data is available to restore the value of the property from to obtain the default value for the property. [...]
didUpdateValue(T? oldValue) → void
Called whenever a new value is assigned to value. [...]
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). [...]
fromPrimitives(Object? data) → T
Called by the RestorationMixin to convert the data previously retrieved from toPrimitives back into an object of type T that this property should wrap. [...]
initWithValue(T value) → void
Called by the RestorationMixin with the value returned by either createDefaultValue or fromPrimitives to set the value that this property currently wraps. [...]
@mustCallSuper, override
noSuchMethod(Invocation invocation) → dynamic
Invoked when a non-existent 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. [...]
toPrimitives() Object?
Called by the RestorationMixin to retrieve the information that this property wants to store in the restoration data. [...]
toString() String
A string representation of this object. [...]


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