【问题标题】:What is the RiverPod way to Consume a StreamProvider outside of Flutter - Dart only在 Flutter 之外使用 StreamProvider 的 RiverPod 方式是什么 - 仅限 Dart
【发布时间】:2021-02-14 03:34:31
【问题描述】:

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

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

我的代码基于 RiverPod 站点上引用的 flutter/firebase starter architecture 作为如何使用 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”参考,但是,我不确定在哪里使用它来使用流并评估数据(如果有的话)。

【问题讨论】:

    标签: flutter dart flutter-provider dart-async riverpod


    【解决方案1】:

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

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

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

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

    【讨论】:

    猜你喜欢
    • 2021-03-19
    • 2021-08-02
    • 2021-10-20
    • 2022-12-04
    • 1970-01-01
    • 2021-10-03
    • 2020-11-04
    • 2022-11-28
    • 1970-01-01
    相关资源
    最近更新 更多