skip to Main Content

I have a flutter code which allows user to search for every user speaking a specific language. I implemented a loading controlled by a ‘isLoading’ bool. The thing is, when the user searchs for a language that isn’t used by any user, the loading becomes infinite. How to display a certain widget if the research doesn’t find anything?

void onSeach() async {
setState(() {
  isLoading = true;
});
await DatabaseService()
    .firebaseFirestore
    .collection('users')
    .where('languages', arrayContains: _search.text)
    .get()
    .then((value) {
  setState(() {
    doces = value.docs;
    isLoading = false;
  });
});

}

2

Answers


  1. it’s better to use FutureBuilder or StreamBuilder instead

    FutureBuilder(
       future: onSeach(),
       builder: (context, snapshot) {
       if(if (snapshot.connectionState == ConnectionState.waiting) {
          return LoadingWidget();
        }
       if(snapshot.hasError) {
          return Text("some error happened");
       }      
    
       if(snapshot hasData) {
          return yourWidgets()}
    
       }
       }
    
    Login or Signup to reply.
  2. thanks for your question. I will suggest you add a Navigator.pop(context) immediately after the second setState of the call response like so:

        void onSeach() async {
    setState(() {
    isLoading = true;
    });
    await DatabaseService()
    .firebaseFirestore
    .collection('users')
    .where('languages', arrayContains:     
     _search.text)
    .get()
    .then((value) {
     setState(() {
     doces = value.docs;
     isLoading = false;
      });
     Navigator.pop(context);
     });
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search