我尝试在flutter中将.forEach
循环转换为Future.forEach
循环以等待循环。我要循环播放的元素是Firebase实时数据库的快照。
我的功能如下:
Future<User> getUserByUid(String uid) async {
DataSnapshot dataSnapshot =
await databaseRef.orderByChild("uid").equalTo(uid).once();
List user = List();
dataSnapshot.value.forEach((key, value) async {
User entry = await User.fromJson(value);
await entry.setId(key);
user.add(entry);
});
if (user.isNotEmpty) {
return user[0];
} else {
return null;
}
}
我尝试了不同的方法,但是我无法使用该功能。首次尝试:
Future<User> getUserByUid(String uid) async {
DataSnapshot dataSnapshot =
await databaseRef.orderByChild("uid").equalTo(uid).once();
List user = List();
await Future.forEach(dataSnapshot.value, (element) {
print(element);
});
if (user.isNotEmpty) {
return user[0];
} else {
return null;
}
}
错误:Unhandled Exception: type '_InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'Iterable'
第二次尝试:
Future<User> getUserByUid(String uid) async {
DataSnapshot dataSnapshot =
await databaseRef.orderByChild("uid").equalTo(uid).once();
List user = List();
for (var u in dataSnapshot.value) {
print(u);
}
if (user.isNotEmpty) {
return user[0];
} else {
return null;
}
}
错误:Unhandled Exception: type '_InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'Iterable'
对于所有尝试,我都会遇到相同的错误。但是上面的
.forEach
示例有效。另一个问题:在
.forEach
中,我还获得了key
变量。在Future.forEach中也可以通过某种方式使用吗?
最佳答案
您正在尝试遍历 map ,但是(如错误所示)map不可迭代。您可以遍历 map 的键:
for (var key in dataSnapshot.value.keys) {
print(dataSnapshot.value[key]);
}
关于flutter - 在Flutter中将forEach循环转换为Future.forEach循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64698162/