View

300x250

Riverpod 패키지의 여러 Provider 중에서 특정 데이터(상태값)을 확인하기 위해 파일IO나 네트워크 등의 비동기 처리가 필요한 경우에, FutureProvider를 활용해줄 수 있다.

 

FutureProvider의 공식 문서를 살펴보면, 비동기 프로세싱에 대해서 캐싱 처리를 지원한다고 되어있다.

 

즉, FutureProvider를 사용하는 경우에, 동일한 요청에 대해서는 새로고침을 요청하지 않는다면 알아서 캐싱된 데이터를 가져와 제공하기 때문에 효율적으로 상태 관리를 처리해줄 수 있다! 다시 말해서, 한 번 비동기 로직을 수행하여 상태값을 만들어둔다면 다시 로직을 수행하지 않고 결과값을 바로 전달한다. (Dispose 시점을 잘 제어한 경우에 해당함 — @rivderpod 어노테이션을 통해 만들어준 Provider는 기본적으로 AutoDispose 이기 때문에 레퍼런스가 되고있지 않으면 상태값이 자동으로 초기화될 수 있음)

 

Provider가 keepAlive로 설정되어 있다면, 상태값이 참조되지 않아도 상태가 제거되지 않고 남아있게 된다. 아래 그림에서 Cached(Paused) 모드로 진입한다고 보면 될 것 같다.

 

https://codewithandrea.com/articles/flutter-riverpod-data-caching-providers-lifecycle/

 

 

만약 FutureProvider로 요청하는 데이터에 특정 파라미터를 함께 넘기려는 경우에는 family 를 함께 사용해주면 된다.

final myFutureStateProvider = FutureProvider.family<데이터_타입, 파라미터_타입>(
  (ref, param) async {
    return ref.read(Usecase_Provider).call(param: param).then(
          (value) => ...
        );
  },
);

이때 각 파라미터 값에 대해서 요청과 결과를 캐싱해두기 때문에, 다른 파라미터 값으로 FutureProvider에게 상태값에 대한 접근을 요청하더라도 이전 파라미터 값에 대한 상태를 바로 가져올 수도 있다.

 

 

사실 이 포스트를 쓰던건 이후에 나올 문제를 해결하기 위해서였는데, FutureProvider 와 관련된 문제가 아니라 Equatable 패키지와 관련된 문제였다. 새로운 글로 분리해서 이어서 작성하겠습니다~

 

(FutureProvider와 Equatable 패키지의 궁합 문제인 줄 알고 신나서 글쓰러 들어왔었는데, 원인을 잡고보니 더 어이없음)

320x100
Share Link
reply
반응형
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31