notifyMayHaveChanged method

  1. @protected
void notifyMayHaveChanged()

Notify that this provider may have changed.

This does not guarantee that the provider did change, only that it is possible that it did.

Implementation

@protected
void notifyMayHaveChanged() {
  assert(() {
    if (_debugCurrentlyBuildingElement == null ||
        _debugCurrentlyBuildingElement == this) {
      return true;
    }
    final parentsQueue = DoubleLinkedQueue<ProviderElement>.from(
      _subscriptions.keys,
    );

    while (parentsQueue.isNotEmpty) {
      final parent = parentsQueue.removeFirst();
      if (parent == _debugCurrentlyBuildingElement) {
        return true;
      }
      parentsQueue.addAll(parent._subscriptions.keys);
    }

    throw AssertionError('''
The provider $provider was marked as needing to be recomputed while creating ${_debugCurrentlyBuildingElement!.provider},
but $provider does not depend on ${_debugCurrentlyBuildingElement!.provider}.
''');
  }(), '');
  if (!_mounted) {
    throw StateError('Cannot call onDispose after a provider was dispose');
  }
  if (_dirty) {
    return;
  }
  _dirty = true;
  for (final listener in _listeners) {
    if (listener.mayHaveChanged != null) {
      _runGuarded(listener.mayHaveChanged!);
    }
  }
  if (_didMount) {
    for (final observer in _container._observers) {
      _runUnaryGuarded(
        observer.mayHaveChanged,
        _origin,
      );
    }
  }
}