将shared_preferences集成到riverpod中

问题描述 投票:0回答:1

我希望将

shared_preferences
riverpod
一起使用。我是一名 Riverpod 新手,以前从未使用过 Shared_Preferences,因此我正在寻找有关如何将两者结合起来的指南/示例。我确实看到了这个,但那是使用过时的
SharedPreferences
而不是
SharedPreferencesWithCache
SharedPreferencesAsync

以下是我想出的 3 种方法(以我有限的知识):

final sharedPreferencesProvider = Provider((ref)=>SharedPreferencesAsync());

final sharedPreferencesProvider = FutureProvider<SharedPreferences>((ref) async {
  final prefs = await SharedPreferences.getInstance();
  return prefs;
});

final sharedPreferencesProvider =
    FutureProvider<SharedPreferencesWithCache>((ref) async {
  final prefs = await SharedPreferencesWithCache.create(
      cacheOptions: const SharedPreferencesWithCacheOptions(allowList: null));
  return prefs;
});

我不确定该使用哪一个。另外,让 withCache 变体的提供者成为 FutureProvider 感觉很奇怪。这意味着我必须经历所有这些 AsyncValue 麻烦(见下文),而 SharedPreferencesWithCache 则不必处理这个问题,因为由于它被缓存,您应该能够同步调用它。也许不将其放在 FutureProvider 中,而是将其放在全局变量中?但问题来了:我该把这个全局变量放在哪里?

Text(ref.watch(sharedPreferencesProvider).asData!.value.getString("my_key")!);

我还想在原始

prefs
周围有某种包装器,这似乎比连续调用
setString
等更强大一些。不过不确定我如何将该类集成到所有这些中......也许有些东西就像之前链接的例子一样?

flutter dart sharedpreferences riverpod
1个回答
0
投票

您可以使用 Riverpod 的注释来简化此过程,它将自动为您生成必要的提供程序,因此您无需担心提供程序类型。以下是如何将其与 SharedPreferences 一起使用的示例:

// A FutureProvider for accessing SharedPreferences asynchronously
 @Riverpod(keepAlive: true)
 Future<SharedPreferences> sharedPreferences(SharedPreferencesRef ref) =>
 SharedPreferences.getInstance();

通过这种方法,您可以保持代码干净,并且提供程序将自动为您处理异步部分。由于 keepAlive 选项,它还支持缓存。

您可以这样访问首选项:

final prefs = ref.watch(sharedPreferencesProvider).asData?.value;
final myValue = prefs?.getString("my_key");

有关使用 Riverpod 进行稳健应用程序初始化的更多信息,您可以查看这篇有用的文章: 使用 Riverpod 进行稳健的应用程序初始化

© www.soinside.com 2019 - 2024. All rights reserved.