watch<T> method

SaveObservableBase<T> watch<T>(
  1. SaveProvider<T> provider
)

Watch the observables.

Implementation

SaveObservableBase<T> watch<T>(
  SaveProvider<T> provider,
) {
  final key = provider.key;
  final obs = repo.getObservable<T>(key) ?? _createObservable<T>(provider);

  if (needObservation && !_acquired(key)) {
    _subscriptions[key] ??= obs.listen((value) {
      onNotification(provider);
    });
    _providers[key] = provider;
    obs.acquire();
  }

  // TODO: Make this more reasonable and readable
  if (obs case SaveReactiveObservable obs) {
    SaveObserver? parent = this;

    while (parent is SaveReactiveObservable && parent == obs) {
      parent = parent.currentParent;
    }

    obs.currentParent = parent;
  }

  return obs;
}