Zia Ur Rehman
Zia Ur Rehman

Reputation: 11

Switch between streams flutter firebase

I have a class of complains in which there is a field of status. This status can be pending , inprogress, completed , rejected. In UI I have designed buttons to filter complaints on the basis of status. The issue that I am facing is that when I switch stream on button action. It still contains the data of previous stream. Can anyone help me to have 2 streams and not either of it contains data of previous stream.

    bool _isSwitched = false;

  List<Complains> complains = [];
final Stream<QuerySnapshot> _all = FirebaseFirestore.instance
      .collection('Complains').orderBy("startTime", descending: true)
      .snapshots();
  final Stream<QuerySnapshot> _pending = FirebaseFirestore.instance
      .collection('Complains').where('status', isEqualTo: 'Pending').orderBy("startTime", descending: true)
      .snapshots();
ElevatedButton(onPressed:(){
                  setState(() {
                    _isSwitched = !_isSwitched;
                    complains.clear();
                    complains2.clear();
                  });
                } , child: Text("Switch Stream"),),
StreamBuilder<QuerySnapshot>(
                    initialData: null,
                    stream: _isSwitched?_all:_pending,
                    builder: (context, snapshot) {
                      if (snapshot.hasError) {
                        Text("Error");
                      }
                      if (snapshot.connectionState == ConnectionState.waiting) {
                        return Center(
                          child: CircularProgressIndicator(),
                        );
                      }
                      //length of stream is greater than 0
                      if (snapshot.data!.docs.length == 0) {
                        return Center(
                          child: Text("No Complains"),
                        );
                      }

                      for (var element in snapshot.data!.docs) {
                        Complains complain = Complains.fromMap(element.data() as Map<String, dynamic>);
                        _isSwitched?complains.add(complain):complains2.add(complain);
                      }
                      return ListView.builder(
                        itemBuilder: (context, index) {
                          return InkWell(
                            onTap: () {

                            },
                            child: Card(
                              margin: EdgeInsets.all(8.0),
                              elevation: 5,
                              color: Colors.white70,
                              shape: RoundedRectangleBorder(
                                  borderRadius: BorderRadius.all(Radius.circular(12.0))),
                              child: Container(
                                  padding: EdgeInsets.all(20),
                                  child:
                                  Column(children: [
                                    Text("Title\n ${complains[index].title}",style: TextStyle(fontStyle: FontStyle.italic),),
                                    Table(
                                      children: [
                                        TableRow(children: [
                                          Text("Name: " ),
                                          Text("Address: "+ complains[index].address.toString(),),
                                        ]),
                                        TableRow(children: [
                                          Text("Priority: "+ complains[index].priority.toString(),),
                                          Text("Status: "+complains[index].status.toString(),),
                                        ]),
                                        TableRow(children: [
                                          Text("Worker: "+ complains[index].worker.toString(),),
                                          Text("Service: "+ complains[index].service.toString(),),
                                        ]),
                                      ],
                                    ),
                                  ],)

                              ),

                            ),
                          );

                        },

                        itemCount: _isSwitched?complains2.length:complains.length,


                      );
                    },
                  ),
                ),

Upvotes: 1

Views: 128

Answers (0)

Related Questions