【问题标题】:return array and convert it to list flutter firebase返回数组并将其转换为列表颤振火力
【发布时间】:2021-12-23 02:51:18
【问题描述】:
Future<bool> checkLiked(String questionID) async {
DocumentReference ref = questionBank.doc(questionID);
List<dynamic>? list;
await ref.get().then((value) {
list = value['userLiked'];
});
print(list!.contains(uid));
return list!.contains(uid);
}
它 alawys 也返回 false 也已经在列表中的 uid,当我打印列表时它是空的,但是在 then 方法中它包含 uid 如何在 then 方法之外返回列表
【问题讨论】:
标签:
firebase
flutter
google-cloud-firestore
【解决方案1】:
也许您在外面打印列表,但在里面打印值....
但是它们都不会返回正确的值,因为您必须使用 .data()从结果中获取数据:
一种方式
Future<bool> checkLiked(String questionID) async {
DocumentReference ref = questionBank.doc(questionID);
List<dynamic>? list= (await ref.get()).data()?['userLiked'];
return list;
}
另一种方式
Future<bool> checkLiked(String questionID) async {
DocumentReference ref = questionBank.doc(questionID);
List<dynamic>? list;
await ref.get().then((value) {
list = value.data()['userLiked'];
});
return list;
}
还有
Future<bool> checkLiked(String questionID) async {
DocumentReference ref = questionBank.doc(questionID);
List<dynamic>? list;
list = await ref.get().then((value) {
return value.data()['userLiked'];
});
return list;
}
您可以将数组分配给List<dynamic>,而无需强制转换。
【解决方案2】:
将async/await 和then 结合使用会引发问题。您应该使用async/await 或 then,而不是同时使用。
Future<bool> checkLiked(String questionID) async {
DocumentReference ref = questionBank.doc(questionID);
DocumentSnapshot value = await ref.get();
List<dynamic>? list = value['userLiked'];
print(list!.contains(uid));
return list!.contains(uid);
}