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);
}
它也会返回false,也就是已经在列表中的uid,当我打印列表时,它是空的,但在then方法中,它包含如何在then 方法之外返回列表的uid
也许您在外部打印列表,但在内部打印值
但是它们都不会返回正确的值,因为您必须使用.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>
。
将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);
}