- 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 인스턴스를 한 번만 생성하여 재사용할 수 있도록 하며, 이를 통해 코드의 일관성과 유지보수를 용이하게 할 수 있습니다.
'Flutter > MVVM 활용' 카테고리의 다른 글
[Flutter] (MVVM 활용) 데이터 접근 계층인 PostRepository 만들어 봅시다. - 4 (0) | 2024.11.19 |
---|---|
[Flutter] (MVVM 활용) API에서 사용할 데이터 구조를 정의하기 위해 Post 클래스를 만들어 봅시다.(모델링 작업) - 3 (0) | 2024.11.19 |
[Flutter] (MVVM 활용) 플러터 프로젝트 생성 - 1 (0) | 2024.11.19 |
[Flutter] riverpod 과 MVVM 활용 (0) | 2024.11.19 |
[Flutter] (MVVM 활용) riverpod 개념 정리 (2) | 2024.11.19 |