addObserve<R> method

MutationCancelFunction addObserve<R>(
  1. MutationKey<R> key, {
  2. MutationOnUpdateDataCallback<R>? onUpdateData,
  3. MutationOnUpdateErrorCallback? onUpdateError,
  4. MutationOnUpdateInitializedCallback? onUpdateInitialized,
  5. MutationOnUpdateLoadingCallback? onUpdateLoading,
  6. MutationOnOpenCallback<R>? onOpen,
  7. MutationOnCloseCallback<R>? onClose,
  8. dynamic initialCall = false,
})

Implementation

MutationCancelFunction addObserve<R>(MutationKey<R> key,
    {MutationOnUpdateDataCallback<R>? onUpdateData,
    MutationOnUpdateErrorCallback? onUpdateError,
    MutationOnUpdateInitializedCallback? onUpdateInitialized,
    MutationOnUpdateLoadingCallback? onUpdateLoading,
    MutationOnOpenCallback<R>? onOpen,
    MutationOnCloseCallback<R>? onClose,
    initialCall = false}) {
  if (onUpdateData != null) {
    if (initialCall) {
      onUpdateData(key.data, before: key.data);
    }
    final list = _getOrNewMapList(EventKey.DATA, key);
    list.insert(0, onUpdateData);
  }
  if (onUpdateError != null) {
    if (initialCall) {
      onUpdateError(key.error, before: key.error);
    }
    final list = _getOrNewMapList(EventKey.ERROR, key);
    list.insert(0, onUpdateError);
  }
  if (onUpdateInitialized != null) {
    if (initialCall) {
      if (key.isInitialized) {
        onUpdateInitialized();
      }
    }
    final list = _getOrNewMapList(EventKey.INITIALIZED, key);
    list.insert(0, onUpdateInitialized);
  }
  if (onUpdateLoading != null) {
    if (initialCall) {
      onUpdateLoading(key.isLoading);
    }
    final list = _getOrNewMapList(EventKey.LOADING, key);
    list.insert(0, onUpdateLoading);
  }
  if (onOpen != null) {
    final list = _getOrNewMapList(EventKey.OPEN, key);
    list.insert(0, onOpen);
  }
  if (onClose != null) {
    final list = _getOrNewMapList(EventKey.CLOSE, key);
    list.insert(0, onClose);
  }
  return () {
    removeObserve(key,
        onUpdateData: onUpdateData,
        onUpdateError: onUpdateError,
        onUpdateInitialized: onUpdateInitialized,
        onUpdateLoading: onUpdateLoading,
        onOpen: onOpen,
        onClose: onClose);
  };
}