ProviderContainer constructor
ProviderContainer({
- ProviderContainer? parent,
- List<
Override> overrides = const [], - List<
ProviderObserver> ? observers,
An object that stores the state of the providers and allows overriding the behavior of a specific provider.
If you are using Flutter, you do not need to care about this object
(outside of testing), as it is implicitly created for you by ProviderScope
.
Implementation
ProviderContainer({
ProviderContainer? parent,
List<Override> overrides = const [],
List<ProviderObserver>? observers,
}) : _parent = parent,
_localObservers = observers,
_root = parent?._root ?? parent {
assert(() {
_debugId = '${_debugNextId++}';
RiverpodBinding.debugInstance.containers = {
...RiverpodBinding.debugInstance.containers,
_debugId: this,
};
return true;
}(), '');
if (parent != null) {
if (observers != null) {
throw UnsupportedError(
'Cannot specify observers on a non-root ProviderContainer/ProviderScope',
);
}
for (final override in overrides) {
if (override is! ProviderOverride ||
override._origin is! ScopedProvider) {
throw UnsupportedError(
'Cannot override providers on a non-root ProviderContainer/ProviderScope',
);
}
}
parent._children.add(this);
_overrideForProvider.addEntries(parent._overrideForProvider.entries
.where((e) => e.key is ScopedProvider));
}
for (final override in overrides) {
if (override is ProviderOverride) {
_overrideForProvider[override._origin] = override._provider;
} else if (override is FamilyOverride) {
_overrideForFamily[override._family] = override;
}
}
}