Я хочу запросить ссылку на коллекцию Firebase со списком нескольких идентификаторов документов в Streambuilder, но, похоже, доступны только
.where()
функций запроса:
Query where(String field, {dynamic isEqualTo, dynamic isLessThan, dynamic isLessThanOrEqualTo, dynamic isGreaterThan, dynamic isGreaterThanOrEqualTo, dynamic arrayContains, bool isNull})
Я протестировал isEqualTo, и это прекрасно работает, если я установил строку для передачи, но я не могу заставить это работать со списком. Похоже, что в официальной документации Firebase есть функция IN, которая бы обеспечивала эту функцию максимум для 10 элементов:
https://firebase.google.com/docs/firestore/query-data/queries#in_and_array -contains-any
Есть ли в Flutter эквивалентная функция IN или есть другой способ добиться этого? Список, который я пытаюсь передать, фактически обслуживается родительским Streambuilder, который запрашивает коллекцию User для указанного пользователя c и передает во всех группах второй Streambuilder:
class _StarredChatState extends State<StarredChat> {
final _firestore = Firestore.instance;
@override
Widget build(BuildContext context) {
final user = Provider.of<User>(context);
final userID = user.uid;
return StreamBuilder<QuerySnapshot>(
stream: _firestore.collection('users/$userID/chats')
.snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(
backgroundColor: Colors.lightBlueAccent,
),
);
}
List<String> ChatIDList = [];
final ChatIDs = snapshot.data.documents;
for(var x in ChatIDs) {
final ChatID = x.data['chats'].toString();
ChatIDList.add(ChatID);
}
return StreamBuilder<QuerySnapshot>(
stream: _firestore.collection('chatrooms')
// here is where I need the IN operator as neither
// arraycontains or isEqualTo give the desired result
.where('description', arrayContains: ChatIDList)
.snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(
backgroundColor: Colors.lightBlueAccent,
),
);
}
//Here is where I want to return a ListBuilder for the above returned
//Streambuilder list
}
);
}
);
}
}
Моя другая попытка в него были включены все пользователи, которые присоединились к чату в качестве подколлекции в отдельном документе чата, но поскольку у них есть уникальные идентификаторы autoID, я не могу создать поток всех чатов с указанным пользователем c, поскольку не могу пройти полный путь к вложенной коллекции. Любые другие указатели будут по достоинству оценены.
Спасибо