繁体   English   中英

在 Flutter - Dart 之外使用 StreamProvider 的 RiverPod 方式是什么?

[英]What is the RiverPod way to Consume a StreamProvider outside of Flutter - Dart only

第一次使用 RiverPod 和一般的 Provider 概念。

目标:验证登录用户在我的帐户FireStore集合中有一个帐户信息文档

我的代码基于RiverPod站点上引用的 Flutter /firebase 启动器架构,作为如何使用 RiverPod 进行 state 管理的示例。

我正在使用最新的flutter_riverpod package。

我的最小化代码:

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();
});

这是我坚持的部分。 其他一切都检查出来。 如何仅在 Dart 上下文中使用 Flutter 之外的accountStreamProvider 同样,我的目标是简单地评估 stream 是否为空或是否包含文档。

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 读取提供程序之外的提供程序”参考,但是,我不确定 go 在哪里使用 ZF7B44CFAFD5C52223D5498E 和评估数据是否存在。

您发布的文档链接显示了如何从ProviderContainer获取StateController

看起来StateController class 有一个stream属性,所以你可以听一下:

https://pub.dev/documentation/riverpod/latest/riverpod/StateController-class.html

(我还没有尝试过,但这就是我可以从文档中得出的结论)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM