anchor.diff:      _updateScheduled = false;
     }
   
  +  /// Used by [ProviderStateBase.notifyListeners] to let [ProviderStateOwner]
  +  /// know that a provider _truly_ changed.
  +  ///
  +  /// This is then used to notify [ProviderStateOwnerObserver]s of the changes.
     void _reportChanged(ProviderBase origin, Object state) {
       if (_observers != null && _observers.isNotEmpty) {
         _providerChanges ??= {};
  
positive.code: ///
  /// This prevents modifying providers that already notified their listener in
  /// the current frame.
  @visibleForTesting
  int notifyListenersDepthLock = -1;
  
  /// Do not implement, only extend
  abstract class ProviderStateOwnerObserver {
    void didAddProvider(ProviderBase provider, Object value) {}
  
    void didUpdateProviders(Map<ProviderBase, Object> changes) {}
  
    void didDisposeProvider(ProviderBase provider) {}
  }
  
  /// Implementation detail for [ProviderStateOwner.ref].
  final _refProvider = Provider((c) => c);
  
  class ProviderStateOwner {
    ProviderStateOwner({
      ProviderStateOwner parent,
      List<ProviderOverride> overrides = const [],
  
negative.code:     _notifyListeners();
    }
  
    /// Used by providers when their state has changed and they want to notify listeners.
    ///
    /// If this is the first time a provider wants to notify listeners since the
    /// last [update] call, this will call [_markNeedsUpdate].
    ///
    /// See also [ProviderStateBase.markNeedsNotifyListeners].
    void _scheduleNotification() {
      if (_disposed) {
        throw StateError(
  