flutter - Flutter Firestore 返回 Future> 返回空
问题描述
我有一个函数可以检索数据列表作为未来。
final CollectionReference _departmentHoursCollection =
FirebaseFirestore.instance.collection('departmentsHours');
Future<List<DepartmentHour>> isUnfinishedGK(List<String> sites) async {
sites.asMap().forEach((key, value) async {
QuerySnapshot departmentsHoursSnapshot = await _departmentHoursCollection
.where('siteName', isEqualTo: value)
.where('justification', isEqualTo: 'working')
.get();
if (departmentsHoursSnapshot.docs.isNotEmpty) {
departmentsHoursSnapshot.docs.asMap().forEach((key, value) async {
var document = await value.reference.get();
print(document.data());
_temporal.add(DepartmentHour.fromMap(document.data()));
});
}
});
print("size: ${_temporal.length}");
return _temporal;
}
但是,当我最后打印尺寸时,它一直显示:
I/颤振(20592):大小:0
但是正在获取数据并将其添加到变量中:_temporal:
I/flutter (20592): {globalTime: 24304, endHour: 06:00, startedTime: Timestamp(seconds=1602329908, nanoseconds=453000000), departmentHourDetails: [{globalTime: 24300, endJobTime: Timestamp(seconds=1602354212, nanoseconds=456000000) ), 部门: Grind Room, startJobTime: Timestamp(seconds=1602329911, nanoseconds=766000000)}, {globalTime: 24299, endJobTime: Timestamp(seconds=1602354212, nanoseconds=456000000), department: Main Production, startJobTime: Timestamp(seconds= 1602329913, nanoseconds=94000000)}], startHour: 22:00, scheduleDate: Timestamp(seconds=1602306000, nanoseconds=0), finishedTime: Timestamp(seconds=1602329908, nanoseconds=453000000), siteName: SMD, justification: working}
任何人都知道如何使用获取的数据返回列表,而不是返回 []。
解决方案
要解决这个问题,您可以使用Future.forEach(),它会等待每个 Future 完成,然后再移动到下一个元素,如您在此处看到的。
例子:
Future<List<String>> myFuture(List<String> names) async {
List<String> newNames = [];
await Future.forEach(names, (name) async {
await Future.delayed(Duration(seconds: 2), () {
newNames.add(name);
});
});
return newNames;
}
推荐阅读
- ios - 在向上滚动更改 tableview 标题
- magento2 - Mage2 :传递给 Magento\Paypal\Model\Adminhtml\Express::isOrderAuthorizationAllowed() 的参数 1 必须是 Magento\Sales\Model\Order\Payment 的实例
- java - 如何将推送通知的已读回执发送到 Android 上的 Amazon Pinpoint?
- tensorflow - 输入必须是4维[1,30,144,192,3],tensorflow训练出错
- php - 在 Laravel 或原始 SQL 中创建基于过滤器的搜索的最佳方法是什么?
- outlook - Outlook Web 加载项入口页面(taskpaneurl)可以知道哪个任务窗格按钮触发访问吗?
- html - 添加内容时,内联块 div 元素未垂直对齐
- bash - 获取 bash 脚本并通过反引号执行为变量赋值
- javascript - 文章最后一行的文字颜色渐变
- node.js - 如何在 API 导入请求期间避免“分配失败 - JavaScript 堆内存不足”