[Flutter] Modifier-②AutoDispose Modifier

겨레·2024년 7월 23일

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 > 달아준다.



  • auto_dispose_modifier_provider.dart 코드
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 해주기

  • auto_dispose_modifier_screen.dart 코드
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은 매번 새롭게 값이 생성되어 로딩
된다.

profile
호떡 신문지에서 개발자로 환생

0개의 댓글