본문 바로가기

코딩(coding)일지/flutter

[ flutter ] FutureProvider + dio

import 'package:dio/dio.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:nawa_app/models/keyword_model.dart';
import 'package:nawa_app/services/crypto.dart';
import '../config/enviroment.dart';
import '../models/common_model.dart';
import '../services/firebase.dart';

class ApiProviders<T> {
// <out , in>
  static FutureProviderFamily<ResModel, ReqModel> post = FutureProvider.family<ResModel, ReqModel>((ref, credentials) async {
    final storage = FlutterSecureStorage();
    final token = await storage.read(key: 'token');
    final dio = Dio(BaseOptions(
      baseUrl: env.serverUrl,
      headers: {
        'authorization': 'Bearer $token',
      },
    ));
    try {
      final response = await dio.post(
        credentials.params,
        data: credentials.data,
      );
      return ResModel.fromJson(response.data);
    } catch (e) {
      print('Error occurred: $e'); 
      throw e;
    }
  });
}

 

. family :

 

동일한 로직을 매개변수에 따라 여러 번 재사용하고 싶을 때 사용합니다. 

Family는 같은 유형의 데이터를 다루지만, 매개변수에 따라 다르게 동작해야 할 때 유용합니다.

 

참조 : https://riverpod.dev/ko/docs/concepts/modifiers/family

 

.family | Riverpod

본 문서를 읽기 전에 프로바이더란와 프로바이더 읽기문서를

riverpod.dev

 

. autodisopose

 

class ApiProviders<T> {
// <out , in>
  static AutoDisposeFutureProviderFamily<ResModel, ReqModel> post = FutureProvider.autoDispose.family<ResModel, ReqModel>((ref, credentials) async {
    final storage = FlutterSecureStorage();
    final token = await storage.read(key: 'token');
    final dio = Dio(BaseOptions(
      baseUrl: env.serverUrl,
      headers: {
        'authorization': 'Bearer $token',
      },
    ));
    try {
      final response = await dio.post(
        credentials.params,
        data: credentials.data,
      );
      return ResModel.fromJson(response.data);
    } catch (e) {
      print('Error occurred: $e'); 
      throw e;
    }
  });
}

'코딩(coding)일지 > flutter' 카테고리의 다른 글

[ flutter ] riverpod  (0) 2023.12.25
[ flutter ]google 애널리틱스 연동  (0) 2022.10.02
[ flutter ]dart.io 접근 함수  (0) 2022.09.04
[ flutter ]dart.io 폴더 접근  (0) 2022.09.04
[ flutter ] 생명주기  (0) 2022.05.28