Reputation: 185
I have a collection
company and each company has a collection employee
. I want to create a query to retrieve a particular employee based on its document id. Do you have any idea how to do that?
I was thinking about using collectionGroup("employee"), but I couldn't find a way to access the document id.
Stream<UserModel> streamFirestoreUser() {
return _db
.collectionGroup('employee')
.where("email", isEqualTo: emailController.text)
.limit(1)
.snapshots()
.map((event) => UserModel.fromJson(event.docs.first.data()));
}
Upvotes: 2
Views: 730
Reputation: 141
Try something like this:
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;
},
);
}
}
}
},
),
I hope to help you.
Upvotes: 2