返回array并将其转换为list flutter firebase


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/awaitthen组合在一起会产生问题。您应该使用async/awaitthen,而不是两者都使用。

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);
}

最新更新