# #flutter #google-cloud-firestore #flutter-web
Вопрос:
У меня есть collection
компания, и у каждой компании есть коллекция employee
. Я хочу создать запрос для получения конкретного сотрудника на основе его идентификатора документа. У тебя есть какие-нибудь идеи, как это сделать? Я думал об использовании collectionGroup(«сотрудник»), но не смог найти способ доступа к идентификатору документа.
Stream<UserModel> streamFirestoreUser() {
return _db
.collectionGroup('employee')
.where("email", isEqualTo: emailController.text)
.limit(1)
.snapshots()
.map((event) => UserModel.fromJson(event.docs.first.data()));
}
Ответ №1:
Попробуйте что-нибудь вроде этого:
FirebaseFirestore _firestore = FirebaseFirestore.instance;
final _controller = StreamController<QuerySnapshot>.broadcast();
_listener() {
final stream = _firestore
.collection("company")
.doc(_idCompany)
.collection("employee")
.snapshots(); //retrieve all clients
stream.listen((data) {
_controller.add(data);
});
}
@override
void initState() {
super.initState();
_listener();
}
@override
void dispose() {
_controller.close();
}
...
body: StreamBuilder<QuerySnapshot>(
stream: _controller.stream,
builder: (context, snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
case ConnectionState.waiting:
return //Message: loading;
case ConnectionState.active:
case ConnectionState.done:
if (snapshot.hasError) {
return //Message: error;
} else {
QuerySnapshot? querySnapshot = snapshot.data;
if (querySnapshot!.docs.length == 0) {
return //Message: no clients ;
} else {
return ListView.builder(
itemCount: querySnapshot.docs.length,
itemBuilder: (context, indice) {
List<DocumentSnapshot> clients = querySnapshot.docs.toList();
DocumentSnapshot item = clients[indice];
return //Clients;
},
);
}
}
}
},
),
Я надеюсь вам помочь.
Комментарии:
1. Спасибо за ответ. Дело в том, что я не знаю «_idCompany», и я ищу способ использовать collectionGroup («сотрудник») и найти конкретного сотрудника на основе его идентификатора. Знаете ли вы способ добиться этого?