Modifier에는 family와 autoDispose 두 종류가 있고 어떤 Provider에도 적용시킬 수 있다.
.
을 사용해서 추가 할 수 있다.final familyModifierProvider =
FutureProvider.family<List<int>, int>((ref, data) async {
await Future.delayed(Duration(seconds: 2));
return List.generate(5, (index) => index * data);
});
Provider
를 watch할 때 파라미터를 받는다. 이 파라미터에는 Provider
를 생성했을 때 추가했던 data
값이 들어가게 된다.class FamilyModifierScreen extends ConsumerWidget {
const FamilyModifierScreen({Key? key}) : super(key: key);
Widget build(BuildContext context, WidgetRef ref) {
final state = ref.watch(familyModifierProvider(5));
return DefaultLayout(
title: 'FamilyModifierScreen',
body: Center(
child: state.when(
data: (data) => Text(data.toString()),
error: (err, stack) => Text(err.toString()),
loading: () => CircularProgressIndicator(),
),
),
);
}
}
final autoDisposeModifierProvider =
FutureProvider.autoDispose<List<int>>((ref) async {
await Future.delayed(Duration(seconds: 2));
return [1, 2, 3, 4, 5];
});
class AutoDisposeModifierScreen extends ConsumerWidget {
const AutoDisposeModifierScreen({Key? key}) : super(key: key);
Widget build(BuildContext context, WidgetRef ref) {
final state = ref.watch(autoDisposeModifierProvider);
return DefaultLayout(
title: 'AutoDisposeModifierScreen',
body: Center(
child: state.when(
data: (data) => Text(
data.toString(),
),
error: (err, stack) => Text(
err.toString(),
),
loading: () => CircularProgressIndicator(),
),
),
);
}
}
autoDispose
를 사용하면 뒤로가기 하는 순간 데이터는 삭제가 되면서 다시 로딩이 된다. autoDispose
는 사용하지 않을 때 데이터가 삭제 되어야 할 때 사용 하면된다.