Firebase once() 方法不等待 Flutter
Posted
技术标签:
【中文标题】Firebase once() 方法不等待 Flutter【英文标题】:Firebase once() method does not wait on Flutter 【发布时间】:2021-04-27 10:02:48 【问题描述】:您好,我想从 firebase 数据库中获取数据方法,应该等到它返回该值。
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;
这就是我打电话的地方
Future<ParsedResponse<List<Book>>> getBooks(String input) async
...
List<Book> firebaseBook = await FirebaseController.get().whichBooksUserHave();
...
但它不让等待whichBooksUserHave
方法完成。
【问题讨论】:
我也有同样的问题。奇怪的是,在某些查询上它可以正常工作,但在其他查询上却不行。你知道这是从哪里来的吗? 【参考方案1】:这将帮助您添加一个加载屏幕,直到值加载。如果没有,你需要使用 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.
,
);
【讨论】:
以上是关于Firebase once() 方法不等待 Flutter的主要内容,如果未能解决你的问题,请参考以下文章
Firebase .orderByChild().equalTo().once().then() 当孩子不存在时承诺
为啥 Firebase 会在 once() 函数之外丢失引用?
使用 require_once() 或不使用 require_once()