dispose method

  1. @protected
  2. @mustCallSuper
void dispose()

Implementation

@protected
@mustCallSuper
void dispose() {
  assert(
    _mounted || _debugDidChangeDependency,
    '$provider was disposed twice',
  );
  assert(() {
    RiverpodBinding.debugInstance
        .providerListChangedFor(containerId: container._debugId);
    return true;
  }(), '');

  _mounted = false;
  _runOnDispose();

  // TODO test [listen] calls are cleared

  for (final sub in _dependencies.entries) {
    sub.key._dependents.remove(this);
    sub.key.mayNeedDispose();
  }
  _dependencies.clear();

  for (final observer in _container._observers) {
    _runBinaryGuarded(
      observer.didDisposeProvider,
      _origin,
      _container,
    );
  }

  _listeners.clear();
}