execute<T> static method

Future<ApiResult<T>> execute<T>({
  1. required Future<T> apiCall(),
  2. bool isTokenExpired(
    1. T response
    )?,
  3. String tokenExpiredMessage = 'Session expired',
  4. String unexpectedErrorMessage = 'Unexpected error',
  5. void onError(
    1. Object error,
    2. StackTrace stackTrace
    )?,
})

Implementation

static Future<ApiResult<T>> execute<T>({
  required Future<T> Function() apiCall,
  bool Function(T response)? isTokenExpired,
  String tokenExpiredMessage = 'Session expired',
  String unexpectedErrorMessage = 'Unexpected error',
  void Function(Object error, StackTrace stackTrace)? onError,
}) async {
  try {
    final response = await apiCall();

    if (isTokenExpired?.call(response) == true) {
      return ApiFailure(tokenExpiredMessage);
    }

    return ApiSuccess(response);
  } catch (e, stackTrace) {
    onError?.call(e, stackTrace);
    return ApiFailure(unexpectedErrorMessage, e, stackTrace);
  }
}