我正在查询Firestore,并以QuerySnapshots流的形式返回一个流。我需要将流中包含的文档Map到对象列表。
下面的代码不工作(显然)......也许我只是看这个完全错误。
List<UserTask> getUserTaskList() {
List<UserTask> list;
Stream<QuerySnapshot> stream =
Firestore.instance.collection('userTasks').snapshots();
stream.listen((snapshot) {
snapshot.documents.forEach((doc) {
UserTask userTask = UserTask(
doc.data['id'],
doc.data['Description'],
etc...);
list.add(userTask);
});
});
return list;
}
字符串
对于上面的代码,由于它不等待整个流(或实际上任何流),所以list总是返回null。简而言之,如何将流转换为List?
注:我对Dart的世界很陌生,所以对我宽容点:)
谢谢你,谢谢
2条答案
按热度按时间hmae6n7t1#
首先,请想一想:该函数必须非常快地返回。所有函数都执行,否则UI将挂起。但是,您希望该函数返回来自Internet的内容。这需要时间。函数必须返回。函数不可能简单地执行网络请求并返回结果。欢迎来到asynchronous programming的世界。
此外,您拥有的流不是
DocumentSnapshot
s的流(可以将其转换为UserTask
s),而是QuerySnapshot
s的流(可以将其转换为List<UserTask>
s)。注意这里的复数。如果您只想一次性获得所有UserTask
,则应该使用Future
而不是Stream
。如果您希望在每次更改后重复获取所有UserTask
,则使用Stream
是有意义的。既然你说你想得到一个
List<UserTask>
,我就假设你只想得到一次UserTask
的集合。下面是您的代码在这种情况下会变成的内容:
字符串
如果您真的想使用流,可以使用以下方法:
型
希望对你有帮助。
0s7z1bwu2#
1.就像这样
字符串
所以,我使用了一个getter,但它可能是一个函数(方法)Future<Stream> getUserTaskLists();