首先,考虑一下:此函数必须很快返回。所有功能都可以,否则UI会挂起。但是,您期望函数返回来自互联网的内容。这需要时间。该函数必须返回。函数无法简单地进行网络请求并返回结果。欢迎来到异步编程的世界。
此外,您拥有的流不是
documentSnapshots 流(可以转换为
UserTasks),而是
QuerySnapshots
流(可以转换为
List<UserTask>s)。注意那里的复数。如果您只想
UserTask一次获得所有s,则应使用
Future而不是
Stream。如果您想
UserTask在每次更改后重复获得所有s,那么使用一个
Stream有意义的方法。
既然您说过要获取
List<UserTask>,我假设您只想获取的集合
UserTask一次。
因此,您的代码将变成这样:
Future<List<UserTask>> getUserTaskList() async { QuerySnapshot qShot = await Firestore.instance.collection('userTasks').getdocuments(); return qShot.documents.map( (doc) => UserTask( doc.data['id'], doc.data['Description'], etc...) ).toList(); } main() async { List<UserTask> tasks = await getUserTaskList(); useTasklist(tasks); // yay, the list is here }现在,如果您真的想使用流,请按以下步骤操作:
Stream<List<UserTask>> getUserTaskLists() async { Stream<QuerySnapshot> stream = Firestore.instance.collection('userTasks').snapshots(); return stream.map( (qShot) => qShot.documents.map( (doc) => UserTask( doc.data['id'], doc.data['Description'], etc...) ).toList() ); } main() async { await for (List<UserTask> tasks in getUserTaskLists()) { useTasklist(tasks); // yay, the NEXT list is here } }希望能帮助到你。



