플러터에서 Dio 패키지 사용하기: 심층 가이드

2024. 7. 2. 16:15Flutter/Flutter Programming

반응형

Dio는 플러터에서 네트워크 요청을 처리하는 데 사용되는 강력하고 유연한 HTTP 클라이언트 라이브러리입니다.

HTTP 요청 및 응답을 처리하고, 비동기 작업을 지원하며, 인터셉터를 통해 요청 및 응답을 수정하거나 가로챌 수 있습니다.

Dio는 다음과 같은 장점을 제공합니다.

  • 간단하고 사용하기 쉬운 API: Dio는 간단하고 직관적인 API를 제공하여 HTTP 요청을 쉽게 만들 수 있습니다.
  • 강력한 기능: Dio는 인증, 캐싱, 오류 처리 등 다양한 강력한 기능을 제공합니다.
  • 유연성: Dio는 다양한 HTTP 요청 유형과 헤더를 지원하며, 요청 및 응답을 자세히 제어할 수 있습니다.
  • 확장 가능성: Dio는 인터셉터를 사용하여 기능을 확장하고 사용자 정의할 수 있습니다.

1. Dio 설치 및 설정

Dio를 사용하려면 먼저 프로젝트에 패키지를 설치해야 합니다.

다음 명령을 사용하여 pubspec.yaml 파일에 Dio 종속성을 추가하세요.

dependencies:
  dio: ^7.0.0
 

설치가 완료되면 Dio 클라이언트를 생성할 수 있습니다.

import 'package:dio/dio.dart';

void main() {
  // Dio 클라이언트 생성
  final dio = Dio();

  // ... 나머지 코드 ...
}
 

위 코드에서 dio 변수는 Dio 클라이언트를 나타냅니다. Dio 클라이언트는 기본 설정으로 생성됩니다.

2. HTTP 요청 만들기

Dio를 사용하여 GET, POST, PUT, DELETE 등 다양한 HTTP 요청을 만들 수 있습니다. 다음은 GET 요청을 만드는 방법입니다.

// GET 요청 만들기
final response = await dio.get('https://your-api-url.com/users');

// 응답 처리
if (response.statusCode == 200) {
  print(response.data); // JSON 응답
} else {
  print('Error: ${response.statusCode}');
}
 

위 코드에서 get 메서드는 GET 요청을 만듭니다.

요청 URL은 문자열 매개변수로 전달됩니다.

response 변수는 요청의 응답을 나타냅니다. statusCode 속성은 응답 코드를 가져옵니다.

data 속성은 JSON 응답을 가져옵니다.

3. 요청 매개변수 및 헤더

Dio는 요청 매개변수 및 헤더를 설정할 수 있는 다양한 옵션을 제공합니다. 다음은 요청 매개변수를 설정하는 방법입니다.

// 요청 매개변수 설정
final response = await dio.get('https://your-api-url.com/users',
  queryParameters: {'id': 123, 'name': 'John Doe'},
);
 

위 코드에서 queryParameters 매개변수는 요청 매개변수를 설정하는 데 사용됩니다. 매개변수는 키-값 쌍으로 전달됩니다.

헤더를 설정하려면 headers 매개변수를 사용합니다.

// 요청 헤더 설정
final response = await dio.get('https://your-api-url.com/users',
  headers: {'Authorization': 'Bearer YOUR_TOKEN'},
);
 

4. POST 요청 만들기

POST 요청을 만드는 방법은 GET 요청과 비슷합니다. 다음은 POST 요청을 만드는 방법입니다.

// POST 요청 만들기
final data = {'name': 'John Doe', 'email': 'johndoe@example.com'};
final response = await dio.post('https://your-api-url.com/users', data: data);

// 응답 처리
if (response.statusCode == 201) {
  print('User created');
} else {
  print('Error: ${response.statusCode}');
}
 

위 코드에서 post 메서드는 POST 요청을 만듭니다.

요청 본문은 data 매개변수로 전달됩니다. 본문은 JSON 객체, 문자열 또는 기타 데이터 형식일 수 있습니다.

5. PUT 및 DELETE 요청 만들기

PUT 및 DELETE 요청을 만드는 방법도 GET 및 POST 요청과 비슷합니다.

PUT 요청

// PUT 요청 만들기
final data = {'name': 'Jane Doe', 'email': 'janedoe@example.com'};
final response = await dio.put('https://your-api-url.com/users/123', data: data);

// 응답 처리
if (response.statusCode == 200) {
  print('User updated');
} else {
  print('Error: ${response.statusCode}');
}
 

DELETE 요청

// DELETE 요청 만들기
final response = await dio.delete('https://your-api-url.com/users/123');

// 응답 처리
if (response.statusCode == 200) {
  print('User deleted');
} else {
  print('Error: ${response.statusCode}');
}
 

6. 인증

Dio는 다양한 인증 유형을 지원합니다. 다음은 기본 인증을 사용하는 방법입니다.

// 기본 인증 설정
final dio = Dio();
dio.options.headers.update('Authorization', (value) => 'Basic username:password');
 

위 코드에서 headers 속성은 요청 헤더를 설정합니다. Authorization 헤더는 사용자 이름과 비밀번호를 설정합니다.

7. 캐싱

Dio는 응답을 캐싱하여 네트워크 요청 성능을 향상시킬 수 있습니다. 다음은 응답을 캐싱하는 방법입니다.

// 응답 캐싱 설정
final dio = Dio();
dio.interceptors.add(HttpCacheInterceptor());
 

위 코드에서 HttpCacheInterceptor는 응답 캐싱을 위한 인터셉터를 추가합니다. 캐시 정책은 HttpCacheInterceptor 생성자에서 설정할 수 있습니다.

8. 오류 처리

Dio는 HTTP 오류를 처리하는 데 도움이 되는 다양한 기능을 제공합니다. 다음은 응답 코드에 따라 오류를 처리하는 방법입니다.

// 응답 코드에 따라 오류 처리
final response = await dio.get('https://your-api-url.com/users');

if (response.statusCode == 200) {
  print(response.data);
} else {
  switch (response.statusCode) {
    case 401:
      print('Unauthorized');
      break;
    case 404:
      print('Not Found');
      break;
    default:
      print('Error: ${response.statusCode}');
  }
}
 

위 코드에서 statusCode 속성은 응답 코드를 가져옵니다. switch 문을 사용하여 응답 코드에 따라 오류를 처리할 수 있습니다.

9. 인터셉터

Dio는 인터셉터를 사용하여 요청 및 응답을 가로채고 수정할 수 있습니다. 예를 들어, 로그인 토큰을 요청 헤더에 추가하거나 응답 캐싱을 제어하는 데 인터셉터를 사용할 수 있습니다.

// 인터셉터를 사용하여 로그인 토큰 추가
final dio = Dio();
dio.interceptors.add(InterceptorsWrapper(
  onRequest: (RequestOptions options) async {
    if (options.path == '/login') {
      return options;
    }

    final token = await _getToken();
    if (token != null) {
      options.headers['Authorization'] = 'Bearer $token';
    }

    return options;
  },
));
 

위 코드에서 InterceptorsWrapper는 요청 인터셉터를 정의합니다. onRequest 메서드는 요청이 전송되기 전에 호출됩니다. 이 메서드는 요청 옵션을 수정하거나 요청을 취소할 수 있습니다.

10. Dio 사용 팁

  • 응답을 캐싱하여 네트워크 요청 성능을 향상시키세요.
  • 기본 인증, 토큰 인증 등 다양한 인증 유형을 사용하세요.
  • HTTP 오류를 처리하여 사용자에게 적절한 오류 메시지를 표시하세요.
  • 인터셉터를 사용하여 기능을 확장하고 사용자 정의하세요.
  • 테스트 코드를 작성하여 Dio를 사용하는 코드를 테스트하세요.

11. Dio 대안

Dio 외에도 플러터에서 사용할 수 있는 몇 가지 다른 네트워킹 라이브러리가 있습니다.

  • http: 공식 플러터 패키지이며 간단하고 사용하기 쉬운 API를 제공합니다.
  • Chopper: REST API와 잘 작동하도록 설계된 네트워킹 라이브러리입니다.
  • retrofit: Retrofit과 비슷한 API를 제공하는 네트워킹 라이브러리입니다.

12. 결론

Dio는 플러터에서 HTTP 요청을 처리하는 데 사용되는 강력하고 유연한 네트워킹 라이브러리입니다.

간단하고 사용하기 쉬운 API, 다양한 기능, 확장성을 제공합니다.

Dio를 사용하면 코드를 더욱 효율적이고 유지 관리하기 쉬울 수 있습니다.

 

 

 

수발가족을 위한 일기장 “나비일기장

 

https://play.google.com/store/apps/details?id=com.maccrey.navi_diary_release

 

구글플레이 앱 배포의 시작! 비공개테스트 20명의 테스터모집을 위한 앱 "테스터 쉐어"

 

https://play.google.com/store/apps/details?id=com.maccrey.tester_share_release

 

카카오톡 오픈 채팅방

https://open.kakao.com/o/gsS8Jbzg

반응형