# #javascript #firebase #flutter #dart #google-cloud-firestore
Вопрос:
У меня есть документ с двумя полями, searchkeys1 и searchkeys2, я хочу, чтобы мой запрос firebase проверял, присутствует ли предоставленное мной значение в searchkey1, и возвращал, если не выполнял поиск searchkey2, моей первой попыткой было создать запрос со значением и сначала проверить searchkey1, и если возвращенные документы пусты, попробуйте searchkey2, моя проблема в том, что я продолжаю получать ошибку, когда пытаюсь проверить, были ли возвращены какие-либо документы
"the getter 'documents' isn't defined for the type 'Stream<QuerySnapshot>' "
вот мой код
startSearch(input) {
var docSnapshot = FirebaseFirestore.instance
.collection('items')
.where('searchkeys1', arrayContains: input.toString()).snapshots();
if (docSnapshot.documents.length == 0) {
var docSnapshot2 = FirebaseFirestore.instance
.collection('items')
.where('searchkeys2', arrayContains: input.toString()).snapshots();
return docSnapshot2;
} else if (docSnapshot.documents.length != 0) {
return docSnapshot;
}
Ответ №1:
Вам нужно создать свою функцию async
и использовать get
вместо smnapshots
:
startSearch(input) async {
var docSnapshot = await FirebaseFirestore.instance
.collection('items')
.where('searchkeys1', arrayContains: input.toString()).get();
if (docSnapshot.documents.length == 0) {
var docSnapshot2 = await FirebaseFirestore.instance
.collection('items')
.where('searchkeys2', arrayContains: input.toString()).get();
return docSnapshot2;
} else if (docSnapshot.documents.length != 0) {
return docSnapshot;
}
С get
вами получите данные один раз, как вы этого хотите. Но вместе с snapshots
вами получите слушателя для чанов в реальном времени.