이번 포스트에서는 Flutter 앱에서 dio_retry 패키지를 사용하여 API 요청 중 발생하는 에러를 처리하는 방법에 대해 알아보겠습니다. dio_retry는 HTTP 클라이언트 라이브러리인 Dio를 기반으로 하며, 네트워크 요청 중에 재시도 기능을 제공합니다.
dio_retry 패키지 설치하기
먼저, pubspec.yaml 파일에 dio_retry 패키지를 추가합니다.
dependencies:
dio: ^4.0.0
dio_retry: ^4.0.0
그런 다음 터미널에서 아래 명령을 실행하여 패키지를 설치합니다.
flutter pub get
dio_retry를 사용하여 네트워크 요청 처리하기
다음은 dio_retry를 사용하여 네트워크 요청 중에 발생한 에러를 처리하는 예제입니다.
import 'package:dio/dio.dart';
import 'package:dio_retry/dio_retry.dart';
void main() async {
Dio dio = Dio();
dio.interceptors.add(RetryInterceptor(
dio: dio,
options: const RetryOptions(
retries: 3,
),
));
try {
Response response = await dio.get('https://example.com/api/data');
// 성공적으로 데이터를 받아온 경우
} on DioError catch (e) {
if (e.type == DioErrorType.connectTimeout) {
// 연결 시간 초과 에러 처리
} else if (e.type == DioErrorType.response) {
// 응답 에러 처리
} else {
// 기타 에러 처리
}
}
}
위 예제에서, RetryInterceptor를 dio의 인터셉터에 추가하고, RetryOptions를 설정하여 재시도 횟수를 지정합니다. 그리고 네트워크 요청 중에 발생한 DioError를 catch하여 해당하는 에러 유형에 따라 처리할 수 있습니다.
모델 클래스 관련 에러 처리하기
만약 API 응답을 모델 클래스로 변환하는 과정에서 발생하는 에러를 처리하고 싶다면, dio의 Response 객체를 사용하여 처리할 수 있습니다.
다음은 모델 클래스 관련 에러를 처리하는 예제 코드입니다.
import 'package:dio/dio.dart';
class CustomModel {
String? name;
int? age;
CustomModel.fromJson(Map<String, dynamic> json) {
name = json['name'];
age = json['age'];
}
}
void main() async {
Dio dio = Dio();
dio.interceptors.add(RetryInterceptor(
dio: dio,
options: const RetryOptions(
retries: 3,
),
));
try {
Response response = await dio.get('https://example.com/api/data');
CustomModel model = CustomModel.fromJson(response.data);
// 모델 클래스 변환 성공 시 처리
} on DioError catch (e) {
// 네트워크 요청 실패나 응답 에러 처리
} on FormatException catch (e) {
// 모델 클래스 변환에 실패한 경우 처리
}
}
위 예제에서, API 응답을 CustomModel 클래스로 변환할 때 FormatException을 catch하여 모델 클래스 관련 에러를 처리하고 있습니다.
이렇게 dio_retry 패키지를 사용하여 네트워크 요청 및 모델 클래스 관련 에러를 처리할 수 있습니다. 에러 처리는 안정적인 앱을 제공하기 위한 중요한 요소이므로 주의깊게 다루어져야 합니다.
더 많은 정보를 원하시면 dio_retry 패키지 문서를 참고하세요.