有时我觉得我已经理解提供者(provider)的逻辑,但有时候我会因尝试以下操作而被卡住数小时。
我需要从Firestore集合流(collection stream)中获取连接ID的列表。容易。
但是,我需要将这个流式连接ID列表输入另一个Firestore集合流(collection stream)。如下所示,你可以看到我的upcomingEventsStreamProvider正在监听数据库和connectionsStream。在Riverpod或Firestore中没有抛出任何错误。然而,在日志(logs)中,我按以下顺序看到我的打印输出:
我需要从Firestore集合流(collection stream)中获取连接ID的列表。容易。
但是,我需要将这个流式连接ID列表输入另一个Firestore集合流(collection stream)。如下所示,你可以看到我的upcomingEventsStreamProvider正在监听数据库和connectionsStream。在Riverpod或Firestore中没有抛出任何错误。然而,在日志(logs)中,我按以下顺序看到我的打印输出:
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的流。