Search code examples
androidfirebaseflutterstream-builder

Firebase firestore queries are not filtering data, even when using where in flutter


I'm trying to use where in a Firebase firestore query in my flutter application but it is showing all the data in the collection without filtering it ., here is my code :

  Widget buildingMessages() {
    print('message room id $roomID'); //The correct id is being printed here
    var theMessages = FirebaseFirestore.instance.collection('messages');
    theMessages.where('room_id',isEqualTo: roomID).orderBy('created', descending: true);
    return StreamBuilder<QuerySnapshot>(
      stream: theMessages.snapshots(),
      builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
        if (snapshot.hasError) {
          return Text('Something went wrong');
        }

        return new ListView(
          children: snapshot.data.docs.map((DocumentSnapshot document) {
//....

Solution

  • The problem is in stream: theMessages.snapshots(). You are referencing the theMessages. and you are not using your where clause. extends it with your where clause. like

    stream: theMessages.snapshots().where(
                      'room_id',isEqualTo: roomID).orderBy('created', descending: true);
    

    Edit: Or initialize it as

    var theMessages = FirebaseFirestore.instance.collection('messages').
                where('room_id',isEqualTo: roomID).orderBy('created', descending: true);