Flutter Provider - StreamProvider 依赖于另一个 StreamProvider
Flutter Provider - StreamProvider depending on another StreamProvider
TLDR
如何使用一个流媒体提供商的数据调用另一个流媒体提供商?
问题背景
您好!我有这个 Firebase 实时数据库结构
每个用户的组 ID 都存储在这里。可以访问它们然后查询以下 'Groups' Json 树。
这里有一个组的所有数据,多个用户可以访问。结构是这样的,避免数据冗余。
问题
我正在使用提供程序包。要获取用户数据,它就像一个魅力:
- 我使用流媒体提供商
- 我使用 onValue 函数查询数据库 --> Stream。
- 我将该流中的数据映射到 class 并使用 fromMap() 工厂函数
将其转换为 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,
);
},
)
TLDR 如何使用一个流媒体提供商的数据调用另一个流媒体提供商?
问题背景
您好!我有这个 Firebase 实时数据库结构
每个用户的组 ID 都存储在这里。可以访问它们然后查询以下 'Groups' Json 树。
这里有一个组的所有数据,多个用户可以访问。结构是这样的,避免数据冗余。
问题
我正在使用提供程序包。要获取用户数据,它就像一个魅力:
- 我使用流媒体提供商
- 我使用 onValue 函数查询数据库 --> Stream。
- 我将该流中的数据映射到 class 并使用 fromMap() 工厂函数 将其转换为 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,
);
},
)