- 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.... 토큰 값
}
)
);
리버팟에서 제공하는 여러 클래스들 중에 Provider를 선택한 이유?
스프링 컨테이너처럼 중앙에서 객체를 관리하고 의존성 주입을 활용해야 할 때는 Providers 종류를 선택하면 됩니다.
Provider는 단순히 불변 객체를 제공할 때 사용하는 가장 기본적인 유형의 Provider입니다. 상태 관리나 로직이 필요하지 않은 경우에 적합하며, 프로젝트 전반에 걸쳐 Dio와 같은 인스턴스를 제공만 하면 될 때 사용됩니다. 이 경우 Dio 인스턴스를 한 번만 생성하여 재사용할 수 있도록 하며, 이를 통해 코드의 일관성과 유지보수를 용이하게 할 수 있습니다.
728x90
'Flutter' 카테고리의 다른 글
riverpod 과 MVVM 활용 - 데이터 접근 계층인 PostRepository 만들어 보자(4) (0) | 2024.11.20 |
---|---|
riverpod 과 MVVM 활용 - API에서 사용할 데이터 구조를 정의하기 위해 Post 클래스를 만들어 보자.(모델링 작업)(3) (0) | 2024.11.19 |
riverpod 과 MVVM 활용 - 플러터 프로젝트 생성(1) (0) | 2024.11.19 |
riverpod 과 MVVM 활용 - riverpod 개념 정리 (1) | 2024.11.19 |
당근 마켓 만들어 보기 (2) | 2024.11.19 |