updateOverrides method

void updateOverrides(
  1. List<Override> overrides
)

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;
    }
  }
}