🤖

Flutter Riverpod autoDisposeでもProviderの値を保持し続ける

2024/09/12に公開1

結論

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

DiegoDiego

活用方法ですが、1番メジャーなのはキャッシュの時間を制御するために使われるやつですね!
exception時にはtry catchせずとも、keepAliveは実行されないので、必要ないかもです!