[flutter] dio_retry 패키지를 사용하여 모델 클래스 관련 에러 처리하기

이번 포스트에서는 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 패키지 문서를 참고하세요.