flutter - 填充前的未来返回列表
问题描述
我有以下方法:
Future<List<Job>> getUserJobs() async {
Query query = _firebaseDatabase
.reference()
.child("jobs")
.child(_firebaseAuth.currentUser.uid)
.orderByKey();
List<Job> userJobs = [];
if (query == null) {
return userJobs;
}
query.onValue.listen((event) {
Map<dynamic, dynamic> values = event.snapshot.value;
values.forEach((key, value) {
userJobs.add(Job.fromJson(key, Map.from(value)));
});
});
return userJobs;
}
我想在另一个类中得到这个响应,但是,上述方法返回的列表总是[]。我检查并确实填充了 userJobs 列表,但之前执行了 return 语句。
数据库的结构是: 作业集合具有用户 ID,对于每个用户 ID,我有几个作业键(每个都有其作业数据)。
解决方案
尝试这个:
Future<List<Job>> getUserJobs() async {
List<Job> userJobs = [];
// Query query =
await _firebaseDatabase
.reference()
.child("jobs")
.child(_firebaseAuth.currentUser.uid)
.once()
.orderByKey().then((result) async {
if (result.value != null) {
result.value.forEach((key, childSnapshot) {
userJobs.add(Job.fromJson(key, Map.from(childSnapshot)));
});
} else {
print(
'getUserJobs() no jobs found');
}
}).catchError((e) {
print(
'getUserJobs() error: $e');
});
// if (query == null) {
// return userJobs;
// }
// query.onValue.listen((event) {
// Map<dynamic, dynamic> values = event.snapshot.value;
// values.forEach((key, value) {
// userJobs.add(Job.fromJson(key, Map.from(value)));
// });
// });
return userJobs;
}
您的循环也需要是异步的..否则该方法将在循环完成之前返回,返回空列表..一直在那里并且对此感到非常沮丧..也总是使用 .catchError
回调..它会告诉你出了什么问题;)
推荐阅读
- facebook-ads-api - Facebook 受众网络问题
- java - java中需要String.hashCode()方法的证明/分解
- c# - MVC C# AJAX Post 路由问题
- bash - 带有环境变量的 Codebuild 工作流
- c++ - 在链表中删除该节点时,Node* 接下来会发生什么?
- performance - AnyDAC 组件执行 SQL 查询比 FIBPlus 组件慢
- android - Docker 找不到 Android SDK 和 NDK 目录
- scala - 如何修复此代码,我没有收到错误,但数据未导出到 csv
- css - 在 css 中使用@media screen 是不是很不专业
- sails.js - 为什么在 Sails.js 应用程序中调用 axios 后元素不更新?