flutter - 方法填充后如何返回列表,颤振
问题描述
我遇到了一个问题,我想知道你是否可以帮助我。
我有一个返回项目列表的函数(在 Flutter 中)。现在这个项目列表应该由另一个函数填充,该函数认为我的数据库并收集正确的项目。我的问题是,我的函数在返回语句之后运行......这是一些代码:
Future<List<MaterialItem>> getItems(String path, String fach) async {
// This is a empty List that I want to fill
List<MaterialItem> list = [];
// That's my Function, that fills the List
var result = await _db
.collection("$path/$fach/")
.get()
.then((QuerySnapshot querySnapshot) {
querySnapshot.docs.forEach((doc) {
// Here the List gets filled
list.add(MaterialItem.fromSnapshot(doc.data() as Map<String, dynamic>));
});
});
// Here the List should be returned, but after my Function fills it.
return list;
}
希望你知道我的问题是什么,有人可以帮助我。
解决方案
我认为您可以使用Completer
. 您的函数应该返回 的 Future 属性,Completer
然后数据库调用应该完成它。
看一下 API 和示例: https ://api.dart.dev/stable/2.12.4/dart-async/Completer-class.html
例如:(伪代码)
Future<List<MaterialItem>> getItems(String path, String fach) async {
// declare a completer
Completer<List<MaterialItem>> completer = Completer();
List<MaterialItem> list = [];
final result = await _db
.collection("$path/$fach/")
.get()
.then((QuerySnapshot querySnapshot) {
querySnapshot.docs.forEach((doc) {
list.add(MaterialItem.fromSnapshot(doc.data() as Map<String, dynamic>));
});
// let the database call complete the completer
completer.complete(list);
});
// return the future value of the completer
return completer.future;
}
推荐阅读
- python - 使用beautifulsoup时如何找出正确的编码?
- r - 识别 R 中的开始和停止序列以及运行长度
- python - 如何将列表中的两个附近元素相乘?
- python - 尝试训练网络输出:max_pooling2d 从 1 中减去 2 导致的负维度大小
- amazon-web-services - AWS 中的“CharacterSetSettings”
- swift - 根据字段名称过滤对象数组
- python - 如何在 xy 图上绘制循环图
- javascript - 太多同时调用 Google 脚本
- javascript - 如何从 javascript 中的值获取字符串文字(字符数组?)?
- python - pytest django 需要 db 访问才能进行不访问 db 的测试