본문 바로가기

Flutter

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

  • 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