第一次使用 RiverPod 和一般的 Provider 概念。
目标:验证登录用户在我的帐户FireStore集合中有一个帐户信息文档。
我的代码基于RiverPod站点上引用的Flutter /firebase 启动器架构,作为如何使用 RiverPod 进行状态管理的示例。
我正在使用最新的 flutter_riverpod包。
我的最小化代码:
firestore_database.dart - 实现远离 ui 的模型/服务层。
Stream<Account> accountStream() => _service.documentStream(
path: FirestorePath.account(uid),
builder: (data, documentId) => Account.fromMap(data, uid),
);
account_setup_service.dart
final accountStreamProvider = StreamProvider.autoDispose((ref) {
final database = ref.watch(databaseProvider);
return database != null ? database.accountStream() : const Stream.empty();
});
这是我坚持的部分。其他一切都检查出来。如何accountStreamProvider
在仅 Dart 的上下文中使用 Flutter 的外部?同样,我的目标是简单地评估流是否为空或是否包含文档。
Consumer(builder: (context, watch, _) {
final accountAsyncValue = watch(accountStreamProvider);
return accountAsyncValue.when(
// what do I do here to validate that there is an account
// info document for the currently authorized user
// using the accountStreamProvider?
// I don't want to return a widget...
data: (account) => null,
loading: () => null,
error: (_, __) => null,
);
});
在 RiverPod 文档站点上,我阅读了“仅使用 Dart 读取提供程序之外的提供程序”参考,但是,我不确定在哪里使用它来使用流并评估数据(如果有的话)。