captureException method
Обрабатывает исключения типа 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,
);
}