我有一个这样的流的组合列表;
var Ref1 = _firestore
.collectionGroup("Posts")
.where('postID', whereIn: List1)
.snapshots();
var Ref2 = _firestore
.collectionGroup("Posts")
.where('postID', whereIn: List2)
.snapshots();
var Ref3 = _firestore
.collectionGroup("Posts")
.where('postID', whereIn: List3)
.snapshots();
List<Stream<QuerySnapshot>> combineList = [Ref1, Ref2, Ref3];
使用这种方法,我将来自combineList
;的 Streams 合并。
var totalRef = StreamGroup.merge(combineList);
然后我用totalRef
inside StreamBuilder
。
StreamBuilder<QuerySnapshot>(
stream: totalRef,
builder:
(BuildContext context, AsyncSnapshot asyncsnapshot) {
if (asyncsnapshot.hasError) {
return Center(
child: Text("Error"),
);
} else {
if (asyncsnapshot.hasData) {
List<DocumentSnapshot> listOfDocumentSnapshot =
asyncsnapshot.data.docs;
return ListView.builder(
physics: ScrollPhysics(),
shrinkWrap: true,
itemCount: listOfDocumentSnapshot.length,
itemBuilder: (BuildContext context, int index) {
return Padding(
padding: const EdgeInsets.symmetric(
horizontal: 12.0, vertical: 12.0),
child: Container(
child: Column(
children: <Widget>[
Stack(
children: <Widget>[
Align(
alignment: Alignment.topCenter,
child: ClipRRect(
borderRadius:
BorderRadius.circular(24),
child: GestureDetector(
onTap: () => navigateToDetail(
listOfDocumentSnapshot[
index]),
child: Image(
height: 320,
width: 320,
fit: BoxFit.cover,
image: NetworkImage(
listOfDocumentSnapshot[
index]["photo"]),
),
),
),
),
],
),
],
),
),
);
},
);
}
else {
return Center(
child: CircularProgressIndicator(
color: Colors.orangeAccent[400],
),
);
}
}
},
),
但是我在这里遇到了一个问题。当我在 StreamBuilder 中使用 totalRef 时,通常情况下,3 个合并流的所有结果都应该显示在 StreamBuilder 中,但我只在 StreamBuilder 中显示最后一个流(Ref3)的数据。
在我遇到这个问题后,我了解到我必须在列表中定义我合并的流,StreamBuilder
并尝试了以下操作;
List<QuerySnapshot> querySnapshot =
asyncsnapshot.data.toList();
List<DocumentSnapshot> listOfDocumentSnapshot = [];
querySnapshot.forEach((query) {
listOfDocumentSnapshot.addAll(query.docs);
});
但是当我尝试这个时,我得到了以下错误:Class '_JsonQuerySnapshot' has no instance method 'toList'.
收到该错误后,我尝试了另一种方法;
List<QuerySnapshot> querySnapshot;
for (int i = 0; i < combineList.length; i++) {
querySnapshot.add(asyncsnapshot.data[i]);
}
List<DocumentSnapshot> listOfDocumentSnapshot = [];
querySnapshot.forEach((query) {
listOfDocumentSnapshot.addAll(query.docs);
});
我在这个中也遇到了类似的问题:Class '_JsonQuerySnapshot' has no instance method '[]'.
有问题,但我不明白问题是什么,如何显示所有数据流。