Dio는 Flutter 앱에서 서버와의 HTTP 통신을 단순하게 만들어주는 강력한 라이브러리입니다. 하지만 서버와의 통신 중 에러가 발생하는 경우에 대비하여 적절한 처리가 필요합니다. 이를 위해 Dio는 DioError
클래스를 제공하여 서버 응답에 대한 에러를 캡처하고 처리할 수 있습니다.
DioError 처리하기
DioError는 Dio 라이브러리에서 에러가 발생했을 때 발생하는 예외 클래스입니다. 이 에러를 캐치하여 사용자에게 적절한 안내를 하거나 다른 동작을 수행할 수 있습니다.
try {
Response response = await dio.get('https://example.com/api');
// 성공한 경우의 처리
} on DioError catch (e) {
if (e.response != null) {
// 서버 응답이 받아진 경우
print(e.response.data);
print(e.response.headers);
print(e.response.request);
} else {
// 에러가 발생한 경우
print(e.request);
print(e.message);
}
}
위의 예제에서는 try-catch
블록을 사용하여 DioError를 캐치하고, e.response
를 통해 서버 응답을 확인하거나, e.request
와 e.message
를 통해 에러에 대한 정보를 출력하고 있습니다.
에러 핸들링
에러를 적절하게 핸들링하여 사용자에게 이해하기 쉬운 메시지를 제공하는 것이 중요합니다. 이를 통해 사용자 경험을 향상시킬 수 있습니다. 예를 들어, 사용자에게 “서버와의 통신이 원활하지 않습니다”와 같은 메시지를 보여줄 수 있습니다.
showErrorMessage(String message) {
// 사용자에게 에러 메시지를 표시하는 코드
}
위와 같이 showErrorMessage
함수를 생성하여 DioError 캐치 블록에서 사용자에게 적절한 에러 메시지를 보여줄 수 있습니다.
특정 상황에 따른 에러 처리
특정 상황에 따라 다른 에러 처리 로직을 수행해야 할 경우, DioError의 type
속성을 활용할 수 있습니다. 이를 통해 네트워크 에러, HTTP 에러, 취소된 요청 등을 구분하여 적절한 처리를 할 수 있습니다.
if (e.type == DioErrorType.RESPONSE) {
// 서버 응답 에러에 대한 처리
} else if (e.type == DioErrorType.CONNECT_TIMEOUT || e.type == DioErrorType.DEFAULT) {
// 네트워크 연결 에러에 대한 처리
} else if (e.type == DioErrorType.CANCEL) {
// 요청이 취소된 경우의 처리
}
위의 예제에서는 DioErrorType
에 따라 각각의 상황에 따른 처리를 구분하고 있습니다.
Dio를 사용하여 서버와의 통신 중 에러를 처리하는 방법에 대해 알아보았습니다. 에러 핸들링은 안정적이고 사용자 친화적인 앱을 만드는데 중요한 요소이므로, 적절하고 명확한 에러 처리는 매우 중요합니다.
더 많은 정보를 얻고 싶다면 Dio 공식 문서를 참고하시기 바랍니다.