captureException method

Future<ApiException> captureException(
  1. DioException error
)

Обрабатывает исключения типа DioException и преобразует их в ApiException.

error — исключение, возникшее при выполнении HTTP запроса.

Возвращает Future<ApiException> с преобразованной ошибкой, учитывая тип ошибки и статусный код ответа.

Implementation

Future<ApiException> captureException(DioException error) async {
  final errors = formatApiException(error.response?.data ?? {});

  switch (error.type) {
    case DioExceptionType.connectionTimeout:
      return ApiException(type: ApiExceptionType.timeout);
    case DioExceptionType.unknown:
    case DioExceptionType.badResponse:
      if ([400, 404].contains(error.response?.statusCode)) {
        return ApiException(
          type: ApiExceptionType.badRequest,
          statusCode: error.response?.statusCode ?? -1,
          error: error.anyMessage(errorKey),
          stackTrace: error.stackTrace,
          errors: errors,
        );
      } else if ([401].contains(error.response?.statusCode)) {
        return ApiException(
          type: ApiExceptionType.auth,
          statusCode: error.response?.statusCode ?? -1,
          error: error.anyMessage(errorKey),
          stackTrace: error.stackTrace,
          errors: errors,
        );
      } else if ([403].contains(error.response?.statusCode)) {
        return ApiException(
          type: ApiExceptionType.other,
          statusCode: error.response?.statusCode ?? -1,
          error: error.anyMessage(errorKey),
          stackTrace: error.stackTrace,
          errors: errors,
        );
      } else if (error
          .anyMessage(errorKey)
          .contains('XMLHttpRequest error')) {
        final isConnected = await checkConnection();
        if (!isConnected) {
          return ApiException(
            type: ApiExceptionType.timeout,
            statusCode: error.response?.statusCode ?? -1,
            error: error.anyMessage(errorKey),
            stackTrace: error.stackTrace,
            errors: errors,
          );
        } else {
          return ApiException(
            type: ApiExceptionType.other,
            statusCode: error.response?.statusCode ?? -1,
            error: error.anyMessage(errorKey),
            stackTrace: error.stackTrace,
            errors: errors,
          );
        }
      }
    default:
      return ApiException(
        type: ApiExceptionType.other,
        statusCode: error.response?.statusCode ?? -1,
        error: error.anyMessage(errorKey),
        stackTrace: error.stackTrace,
        errors: errors,
      );
  }

  // Данный код не будет достигнут, но добавлен для полноты.
  return ApiException(
    type: ApiExceptionType.other,
    statusCode: error.response?.statusCode ?? -1,
    error: error.anyMessage(errorKey),
    stackTrace: error.stackTrace,
    errors: errors,
  );
}