FamilyModifier에 이어서 남은 AutoDisposeModifier에 대해서도 알아보자!
📍 AutoDispose
👉 자동으로 삭제를 한다, 캐시를 삭제한다, 처음부터 다시 생성한다는 뜻!
그래서 필요없을 땐 삭제하고, 필요할 때 다시 생성함.
📍 AutoDisposeModifier
사용하지 않을 땐 데이터가 삭제되어야 하는 Provider를 생성할 때 사용
① screen/auto_dispose_modifier_screen.dart 파일 생성


② AutoDisposeModifierScreen 버튼 추가
HomeScreen에 AutoDisposeModifierScreen ElevatedButton 추가하기

③ 본격적인 AutoDisposeModifier 만들기
riverpod/auto_dispose_modifier_provider 파일을 생성해준다.
이번에도 FutureProvider로 예시를 들어보겠음.

③-1. FutureProvider 뒤에 .autoDispose를 달아준다.

> ⭐ autoDispose는 새로운 값을 받거나 하지 않음! 알아서 자동으로 삭제한다는 뜻임.
③-2. 그리고 그 뒤에 원래대로 List< int > 달아준다.

import 'package:flutter_riverpod/flutter_riverpod.dart';
final autoDisposeModifierProvider =
FutureProvider.autoDispose<List<int>>((ref) async {
await Future.delayed(const Duration(seconds: 2));
return [1, 2, 3, 4, 5];
});

autoDispose라는 키워드를 빼고 생각하면 FutureProvider는 일반적인 Future Provider임.
그런데!!! autoDispose가 들어가게 되면????
AutoDisposeModifierScreen으로 가서 확인해보자~
④ AutoDisposeModifierScreen 코드 수정하기
④-1. StatelessWidget → ConsumerWidget으로 변경
④-2. build 함수에 WidgetRef ref 파라미터 추가

⑤ ref.watch 해주기
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:riverpod_study/layout/defalut_layout.dart';
import 'package:riverpod_study/riverpod/auto_dispose_modifier_provider.dart';
class AutoDisposeModifierScreen extends ConsumerWidget {
const AutoDisposeModifierScreen({super.key});
Widget build(BuildContext context, WidgetRef ref) {
final state = ref.watch(autoDisposeModifierProvider);
return DefalutLayout(
title: 'AutoDisposeModifierScreen',
body: Center(
child: state.when(
data: (data) => Text(
data.toString(),
),
error: (err, stack) => Text(
err.toString(),
),
loading: () => const CircularProgressIndicator(),
),
),
);
}
}
앱을 한 번 실행해보자.

AutoDisposeModifierScreen 버튼을 누르면...


로딩이 되다가 숫자가 보인다.
다시 뒤로 나갔다가 AutoDisposeModifierScreen 버튼을 눌러
AutoDisposeModifierScreen 화면으로 전환됐을 때
다시 로딩이되는 걸 볼 수 있다.

기존에 사용해봤던 FuturePRoviderScreen 같은 경우엔 버튼을 눌렀을 때 한 번만 로딩되고,
뒤로가기 했다 다시 들어오면 바로 숫자가 나온다.
(데이터가 캐싱이 됨!)
그런데!!!
AutoDisposeModifierScreen는 계속 로딩됨.
똑같은 로직인데도 .autoDispose 라는 키워드를 추가함으로써
AutoDisposeModifierScreen은 매번 새롭게 값이 생성되어 로딩된다.