【发布时间】:2021-06-15 02:09:33
【问题描述】:
有时我认为我得到了提供者的逻辑,然后我被难住了好几个小时试图做下面这样的事情。
我需要从 firestore 集合流中获取连接 ID 列表。很简单。
但是,我需要将此连接 ID 的流式传输列表提供给另一个 Firestore 集合流。下面,您可以看到我的即将到来的EventsStreamProvider 是 ref.watch 数据库和连接流。 Riverpod 或 Firestore 没有抛出任何错误。但是,在日志中,我按以下顺序查看我的打印语句:
returned data
returned null stream value
我如何滥用 Riverpod 提供商的权力?哈哈。
final connectionsStreamProvider = StreamProvider<List<UidConnections>>((ref) {
final database = ref.watch(databaseProvider);
return database != null ? database.connectionsStream() : Stream.value(null);
});
final connectionsListStateProvider = StateProvider<List>((ref) => []);
final upcomingEventsStreamProvider = StreamProvider<List<SpecialEvents>>((ref) {
final database = ref.watch(databaseProvider);
final connectionsStream = ref.watch(connectionsStreamProvider);
if (database != null && connectionsStream != null) {
connectionsStream.whenData((data) {
if (data != null) {
data.forEach((event) {
if (event?.active == true && event?.connectedUid != null) {
ref
.read(connectionsListStateProvider)
.state
.add(event.connectedUid);
}
});
print('returned data');
return database.upcomingSpecialEventsStream(
ref.read(connectionsListStateProvider).state);
}
});
}
print('returned null stream value');
return Stream.value(null);
});
或者,我是否只需要重构我的 Firebase Cloud Firestore 查询以首先获取连接 ID 流?我宁愿使用 Riverpod,因为我仍然需要单独的连接 ID 流。
【问题讨论】:
-
我不确定这是否能解决你的整个问题,但你应该添加一个 return: return connectionsStream.whenData... 因为你正在返回你的 database.upcomingSpecialEventsStream 但不是从 whenData 返回它。跨度>
-
不幸的是,尝试过,但它只会返回 AsyncValue。
-
对,但这应该是一个 AsyncValue
,您可以使用 AsyncValue .when(data, loading, err) 读取它 -
添加return时返回类型为AsyncValue
。 -
我看到@double-beep。已发布答案。
标签: flutter google-cloud-firestore flutter-provider riverpod