Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
310 views
in Technique[技术] by (71.8m points)

Firebase once() method does not wait on Flutter

Hi I want to make a fetch data method from firebase database, and that should be wait until its returns that value.

Future<List<Book>> whichBooksUserHave() async {
    List<Book> books = [];
    DatabaseReference ref =
        databaseReference.child('User').child(_userKey).child('Books');
    //DataSnapshot snapshot = await ref.once();

    await ref.once().then((snapshot) {
      snapshot.value.forEach((key, value) {
        if (value['starred'] == '1') {
          books.add(_getBookWithIdFromFirebase(key));
        }
      });
      return books;
    });
    print('buraya girdi usta ! ');
    return books;
  }

thats where i am calling

Future<ParsedResponse<List<Book>>> getBooks(String input) async {
...
List<Book> firebaseBook = await FirebaseController.get().whichBooksUserHave();
...
}

But it is not let and waiting for the whichBooksUserHave method finish.

question from:https://stackoverflow.com/questions/65853600/firebase-once-method-does-not-wait-on-flutter

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

This will help you to add a loading screen till values load. if not you need to use await.

 Widget futureBuilder() {
            return FutureBuilder<List<Project>>(
              future: _getBooks(),
              builder: (context, snapshot) {
                debugPrint('Builder');
                switch (snapshot.connectionState) {
                  case ConnectionState.done:
                    if (snapshot.hasError)
                      return new Text('Error: ${snapshot.error}');
                    else
                      return listWidget(snapshot);
                    break;
    
                  default:
                    debugPrint("Snapshot " + snapshot.toString());
                  return Container() // also check your listWidget(snapshot) as it may return null.
                }
              },
            );
      }

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...