在 Flutter 之外使用 StreamProvider 的 RiverPod 方式是什么 - 仅限 Dart 第一次与 RiverPod 合作,以及总体上的 Provider 概念我最小化的代码:这是我坚持的部分其他一切检查如何在仅 Dart 上下文中使用 Flutter 之外的 accountStreamProvider?同样,我的目标是简单地评估流是空的还是包含文档

问题描述

第一次与 RiverPod 合作,以及总体上的 Provider 概念。

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

我的代码基于 flutter/firebase starter architecture 站点上引用的此 RiverPod 作为如何使用 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();
});

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

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 文档站点上,我阅读了“Reading a provider outside of providers using Dart only”参考,但是,我不确定在哪里使用它来使用流并评估数据(如果有的话)。

解决方法

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

看起来 StateController 类有一个 stream 属性,因此您可以听到:

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...