updateOverrides method
Updates the list of provider overrides.
If you are using flutter, this is done implicitly for you by ProviderScope
.
Updating a overrideWithValue
with a different value
will cause the listeners to rebuild.
It is not possible, to remove or add new overrides, only update existing ones.
Implementation
void updateOverrides(List<Override> overrides) {
if (_disposed) {
throw StateError(
'Called updateOverrides on a ProviderContainer that was already disposed',
);
}
assert(
_debugOverridesLength == overrides.length,
'Tried to change the number of overrides. This is not allowed – '
'overrides cannot be removed/added, they can only be updated.',
);
for (final override in overrides) {
void debugValidateOverride(
Override? previousOverride,
Type newOverrideType,
) {
if (previousOverride == null) {
throw AssertionError(
'Tried to update the override of a provider that was not overridden before',
);
}
assert(
previousOverride.runtimeType == newOverrideType,
'Replaced the override of type ${previousOverride.runtimeType} '
'with an override of type $newOverrideType, which is different.\n'
'Changing the kind of override or reordering overrides is not supported.',
);
}
switch (override) {
case _ProviderOverride():
final pointer = _pointerManager.readPointer(override.origin);
if (kDebugMode) {
debugValidateOverride(
pointer?.providerOverride,
override.runtimeType,
);
}
pointer!.providerOverride = override;
final element = pointer.element;
if (element == null) continue;
runUnaryGuarded(element.update, override.providerOverride);
case _FamilyOverride():
final pointer = _pointerManager.familyPointers[override.from];
if (kDebugMode) {
debugValidateOverride(
pointer?.familyOverride,
override.runtimeType,
);
}
pointer!.familyOverride = override;
}
}
}