我使用的是颤振,我有一个简单的方法,它读取数据库中的每个用户并将它们添加到列表中,一旦读取完用户,该方法必须返回包含所读取的所有数据的列表,我的问题是,我的函数不会等待侦听器完成读取,然后在侦听器完成读取之前返回我的列表(myList)。如何等待返回的myList,直到侦听器读取了所有元素?
下面是代码:
Future<List<String>> getUsers () async {
List<String> myList = [];
final mRef = FirebaseDatabase.instance.ref().child("Users");
mRef.onValue.listen((event) async {
for (final child in event.snapshot.children) {
myList.add( child.value.toString() ); //ADDS THE VALUE TO THE LIST
}
});
//RETURN THE LIST
return myList;
}我试着在听者面前等待,但什么也没成功。
发布于 2022-04-06 10:48:13
侦听器是等待更改的东西(添加了新文档等)。一旦发生这种情况就会通知你。所以它不是在您调用它之后开始/结束的东西--您通常在颤振类的init中创建它,并且每当发生更改时它都会改变状态。
看起来你只想抓住所有的用户一次,而不是像你正在做的那样听。
所以,也许只是阅读数据,而不是倾听。类似于:
// fetch all the documents
final allDocs =
await FirebaseFirestore.instance.collection('users').get();
// map them to something like your strings.
final thedetails = allDocs.docs.map((DocumentSnapshot e) => e.data()!.toString()).toList();
return thedetails;https://stackoverflow.com/questions/71764640
复制相似问题