addObserver method

  1. @override
void addObserver(
  1. LifecycleObserver observer
)
override

Implementation

@override
void addObserver(LifecycleObserver observer) {
  LifecycleState initialState = _state == LifecycleState.defunct ? LifecycleState.defunct : LifecycleState.ready;
  var statefulObserver = ObserverWithState(initialState, observer);
  ObserverWithState? previous = observerMap[observer];
  if (previous != null) {
    return;
  } else {
    observerMap[observer] = statefulObserver;
  }
  bool isReentrancy = _addingObserverCounter != 0 || _handlingEvent;
  LifecycleState targetState = calculateTargetState(observer);
  _addingObserverCounter++;
  while (statefulObserver.state.index < targetState.index && observerMap.containsKey(observer)) {
    _pushParentState(statefulObserver.state);
    final LifecycleEvent? event = _upFrom(statefulObserver.state);
    if (event == null) {
      throw Exception("no event up from ${statefulObserver.state}");
    }
    statefulObserver.dispatchEvent(lifecycleOwner, event);
    _popParentState();
    targetState = calculateTargetState(observer);
  }
  if (isReentrancy) {
    sync();
  }
  _addingObserverCounter--;
}