【发布时间】:2019-04-16 16:22:45
【问题描述】:
我只是想执行一个“或”运算并将两个查询的两个结果放到一个流中。
这是我的单流代码
StreamBuilder(
stream: Firestore.instance
.collection('list')
.where('id', isEqualTo: 'false')
.orderBy('timestamp')
.snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData)
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Center(
child: CircularProgressIndicator(),
)
],
);
if (snapshot.data.documents.length == 0)
return const Center(
child: Text(
"Not Available",
style: TextStyle(fontSize: 30.0, color: Colors.grey),
),
);
return ListView.builder(
padding: EdgeInsets.all(5.0),
key: Key(randomString(20)),
itemCount: snapshot.data.documents.length,
itemBuilder: (BuildContext context, int index) {
return ListCard(snapshot.data.documents[index]);
},
);
}),
现在我想将两个流提供给同一个流构建器,而不是单个流。
我尝试了 StreamGroup,但自从 Widgets 重建后它无法正常工作
StreamGroup.merge([streamOne, streamTwo]).asBroadcastStream();
我也尝试了以下方法
Stream<List<DocumentSnapshot>> searchResult() {
List<Stream<List<DocumentSnapshot>>> streamList = [];
Firestore.instance
.collection('room-list')
.where('id', isEqualTo: 'false')
.snapshots()
.forEach((snap) {
streamList.add(Observable.just(snap.documents));
});
Firestore.instance
.collection('room-list')
.where('id', isEqualTo: 'pending')
.snapshots()
.forEach((snap) {
streamList.add(Observable.just(snap.documents));
});
var x = Observable.merge(streamList)
.scan<List<DocumentSnapshot>>((acc, curr, i) {
return acc ?? <DocumentSnapshot>[]
..addAll(curr);
});
return x;
}
这里我得到了错误,应该至少有一个流要合并。这是因为 Observable.merge(streamList) 在项目添加到 streamList 之前被调用。
我只是想将两个查询的两个结果合并到一个流中。
【问题讨论】:
-
你能链接
.where()调用吗? -
你可以链接,它会变成一个 AND 运算符而不是 OR 这就是问题所在。一个简单的 OR 在哪里可以解决这个问题,但这样的选项不可用
-
@PraneethDhanushkaFernando 你设法解决了这个问题吗?
-
@hadooper nope 兄弟仍在苦苦挣扎
-
我也遇到了同样的问题,你是怎么解决这个问题的
标签: firebase merge flutter google-cloud-firestore rxdart