PersistentContext constructor Null safety
Creates a widget that provides persistent data from shared preferences to all the descending widgets and allows to update it synchronously.
A defaultValues
map can be provided to set the default values of the
variables. A prefix
string can also be provided, to be used for all
the keys in shared preferences, for example to keep separated different
contexts of your application.
The PersistentContext widget can be accessed from any child as an
InheritedWidget, with the method PersistentContext.of(context)
.
If sharedPreferencesInstance
is provided, the shared preferences will
be imediately available. Otherwise they will be loaded asynchronously
from storage only once, when the widget is created.
Any modification requested from the children will be notified immediately to all the descendants, and automatically consolidated to storage asynchronously.
Implementation
@override
PersistentContext({
Key? key,
required Widget child,
this.defaultValues = const {},
this.prefix = '',
SharedPreferences? sharedPreferencesInstance,
}) : super(
key: key,
notifier: sharedPreferencesInstance != null
? PersistentContextNotifier.preloaded(sharedPreferencesInstance)
: PersistentContextNotifier(),
child: child,
) {
defaultValues.forEach((key, value) {
if (!(value is String ||
value is int ||
value is double ||
value is bool)) {
throw Exception("Invalid default preferences data structure. "
"The value provided for key '$key' has type "
"'${value.runtimeType}'. Only 'String', 'int', 'double' and 'bool' "
"are allowed.");
}
});
}