🤖
Flutter Riverpod autoDisposeでもProviderの値を保持し続ける
結論
autoDispose内でkeepAlive
を呼び出すと,値をキャッシュし続けることができます。
final myProvider = FutureProvider.autoDispose((ref) async {
final response = await httpClient.get(...);
ref.keepAlive();
return response;
});
活用法
autoDisposeのProviderをwatchしつつ、キャッシュできます。
autoDisposeのProviderをwatchするには、呼び出し側のProviderもautoDisposeにしなければなりません。
final myProvider = FutureProvider.autoDispose((ref) async {
final response = await httpClient.get(...);
return response;
});
final hopeProvider = Provider.autoDispose((ref) async {
ref.keepAlive();
final res = ref.watch(myProvider).value;
return res;
});
try-catchで効率よく,キャッシュします。下の例だと,catchした際にはキャッシュせずに,処理の成功時のみキャッシュします。
final myProvider = FutureProvider.autoDispose((ref) async {
try {
final response = await httpClient.get(...);
ref.keepAlive();
return response;
} on Exception catch (e) {
print(e)
return null;
}
});
Discussion
活用方法ですが、1番メジャーなのはキャッシュの時間を制御するために使われるやつですね!
exception時にはtry catchせずとも、keepAliveは実行されないので、必要ないかもです!