Flutter Provider - StreamProvider 依赖于另一个 StreamProvider

Flutter Provider - StreamProvider depending on another StreamProvider

TLDR 如何使用一个流媒体提供商的数据调用另一个流媒体提供商?

问题背景

您好!我有这个 Firebase 实时数据库结构

每个用户的组 ID 都存储在这里。可以访问它们然后查询以下 'Groups' Json 树。

这里有一个组的所有数据,多个用户可以访问。结构是这样的,避免数据冗余。

问题

我正在使用提供程序包。要获取用户数据,它就像一个魅力:

  1. 我使用流媒体提供商
  2. 我使用 onValue 函数查询数据库 --> Stream。
  3. 我将该流中的数据映射到 class 并使用 fromMap() 工厂函数
  4. 将其转换为 class 的结构
Stream<FrediUser> currentUserDataStream() {
    var userRef = 
    FirebaseDatabase.instance.reference().child('Users').
    child(currentUserID!);
    return userRef.onValue.map((event) => 
    FrediUser.fromMap(event.snapshot.value));
}

如果我必须访问用户地图及其嵌套的子地图,这会起作用。 但如上例所示,如果我必须先访问用户映射然后访问组映射,会发生什么情况?我想使用流提供程序完成所有这些操作。

你可以通过使用第一个流作为第二个流的依赖来做到这一点,如下所示

StreamProvider<FrediUser>(
      create: (context) => firstStream(),
      initialData: 'initialData',
      builder: (context, child) {
        return StreamProvider(
          create: (context) => secondStream(
              context.watch<FrediUser>(),
          ),
          initialData: 'initialData',
          child: child,
        );
      },
    )