handleAPICall<R> method

Future<void> handleAPICall<R>({
  1. Emitter<State>? emitter,
  2. required Future<Either<AppError, R>> call,
  3. required dynamic onSuccess(
    1. R data
    ),
  4. required dynamic onFailure(
    1. String error
    ),
})

Implementation

Future<void> handleAPICall<R>({
  Emitter<State>? emitter,
  required Future<Either<AppError, R>> call,
  required Function(R data) onSuccess,
  required Function(String error) onFailure,
}) async {
  if (isClosed) return;

  try {
    final Either<AppError, R> apiResponse = await call;

    return apiResponse.fold(
      (AppError error) => emitter != null
          ? emitter(_mapErrorToState(error, onFailure))
          : emit(_mapErrorToState(error, onFailure)),
      (R data) =>
          emitter != null ? emitter(onSuccess(data)) : emit(onSuccess(data)),
    );
  } catch (e) {
    emit(onFailure("An unexpected error occurred: $e"));
  }
}