addObserver method
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--;
}