Flutter/MVVM 활용

[Flutter] (MVVM 활용) Http 통신 클라이언트 Dio 객체를 만들어 보자 - 2

미로910 2024. 11. 19. 11:35
  • REST API 호출: Dio는 GET, POST, PUT, DELETE 등 다양한 HTTP 요청을 지원합니다.
  • 비동기 네트워크 처리: 비동기적으로 네트워크 요청을 처리하여 애플리케이션의 응답성을 유지합니다.
  • 에러 처리: HTTP 상태 코드에 따라 쉽게 에러 처리를 할 수 있습니다.

 

lib/providers/provider/dio_provider.dart 파일 생성
import 'package:dio/dio.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

// Http 통신을 위한 Dio 싱글톤 인스턴스를 제공 합니다.
// 그래서 싱글톤 인스턴스를 생성해서 애플리케이션 전역에서 재사용 하기로 한다.

// 전역에서 재사용 가능한 Dio 싱글톤 인스턴스를 제공 합니다.

final dioProvider = Provider<Dio> ((ref){
  return _dioInstance;
});

// _dioInstance는 이 파일 안에서만 사용할 수 있는 private 변수입니다.
final Dio _dioInstance = Dio(
  BaseOptions(
    baseUrl: 'https://jsonplaceholder.typicode.com', // API의 기본 URL 설정
    connectTimeout: const Duration(seconds: 5), // 연결 시간 초과
    receiveTimeout: const Duration(seconds: 3), // 응답 시간 초과
    validateStatus: (status) => true, // 모든 상태 코드를 허용하여 예외를 발생시키지 않음 중요!!
     headers: {
      'Content-Type' : 'application/json', // 요청 헤더 설정
       // 필요한 경우 'Authorization' : Be ... 토근 값
     }
  )
);
BaseOptions란?
HTTP 요청을 위한 설정을 기본값으로 정의할 때 사용되는 클래스.
Dio에서 BaseOptions는 요청 옵션을 설정 할 때 사용

주요 기능
1.기본 URL 설정 (baseUrl)
   ● API의 기본 주소를 설정.
   ● 모든 요청에 공통적으로 사용할 URL의 베이스 경로.
2. 타임아웃 설정 (connectTimeout, receiveTimeout)
   ● 요청 연결 또는 응답 수신 시 제한 시간을 설정.
3. 헤더 설정 (headers)
   ● 모든 요청에 포함될 공통 헤더 정의.
4. 응답 타입 설정 (responseType)
   ● 서버 응답 데이터를 원하는 형태로 설정 (JSON, 스트림, 문자열 등).
5. 기타 설정
   ● contentType, queryParameters 등 추가 옵션 설정.

 

리버팟에서 제공하는 여러 클래스들 중에 Provider를 선택한 이유?

스프링 컨테이너처럼 중앙에서 객체를 관리하고 의존성 주입을 활용해야 할 때는 Providers 종류를 선택하면 됩니다.

Provider는 단순히 불변 객체를 제공할 때 사용하는 가장 기본적인 유형의 Provider입니다. 상태 관리나 로직이 필요하지 않은 경우에 적합하며, 프로젝트 전반에 걸쳐 Dio와 같은 인스턴스를 제공만 하면 될 때 사용됩니다. 이 경우 Dio 인스턴스를 한 번만 생성하여 재사용할 수 있도록 하며, 이를 통해 코드의 일관성과 유지보수를 용이하게 할 수 있습니다.