【发布时间】:2021-05-30 08:08:19
【问题描述】:
我需要从 Firebase Cloud Firestore 获得 1 个字段 1 次。我如何使用 Widget 构建之外的提供者来实现这一点?
以下是我的综合提供商。 appStartupProvider 是一个 FutureProvider,我想从 firestore 的这个 1 字段中获取 bool 值。但是,appStartupProvider 中的 await 声明“'await' 应用于 'AsyncValue',这不是 'Future'”。
final accountStreamProvider = StreamProvider<Account>((ref) {
final database = ref.watch(databaseProvider);
return database != null ? database.accountStream() : const Stream.empty();
});
final _accountSetupCompleteProvider = Provider<AsyncValue<bool>>((ref) {
return ref
.watch(accountStreamProvider)
.whenData((account) => account?.accountSetupComplete ?? false);
});
final appStartupProvider = FutureProvider<bool>((ref) async {
final accountSetupComplete = await ref.watch(_accountSetupCompleteProvider);
return accountSetupComplete;
});
这里显然缺少一些关于组合提供程序和 AsyncValue 的关键知识,但我正在尝试完成RiverPod Combining Providers 页面上所述的情况,我看到正在使用等待。
【问题讨论】:
-
你解决了吗?我目前正在学习颤振,并且与 Riverpod 提供商有同样的问题。我想解析提供者的返回值,以便可以在另一个提供者中使用该值,但找不到正确的方法。
-
@groo 请参阅下面的答案。 stackoverflow.com/a/66955043/7259858
标签: flutter dart flutter-provider riverpod