of<T extends PropertyChangeNotifier<S> , S extends Object> static method
PropertyChangeModel<T, S> ?
of<T extends PropertyChangeNotifier<S> , S extends Object>(
- BuildContext context, {
- Iterable<
S> ? properties, - bool listen = true,
Retrieves the PropertyChangeModel from the nearest ancestor PropertyChangeProvider.
If listen
is true (which is the default), the calling widget will also be rebuilt
whenever the ancestor's PropertyChangeNotifier model changes. To only rebuild
for certain properties, provide them in the properties
parameter.
If listen
is false, the properties
parameter must be null or empty.
Implementation
static PropertyChangeModel<T, S>? of<T extends PropertyChangeNotifier<S>, S extends Object>(
BuildContext context, {
Iterable<S>? properties,
bool listen = true,
}) {
assert(listen || properties == null, "Don't provide properties if you're not going to listen to them.");
PropertyChangeModel<T, S>? nullCheck(PropertyChangeModel<T, S>? model) {
assert(model != null, 'Could not find an ancestor PropertyChangeProvider<$T, $S>');
return model;
}
if (!listen) {
return nullCheck(context.findAncestorWidgetOfExactType<PropertyChangeModel<T, S>>());
}
if (properties == null || properties.isEmpty) {
return nullCheck(context.dependOnInheritedWidgetOfExactType<PropertyChangeModel<T, S>>());
}
PropertyChangeModel<T, S>? widget;
for (final property in properties) {
widget = InheritedModel.inheritFrom<PropertyChangeModel<T, S>>(context, aspect: property);
}
return nullCheck(widget);
}