#flutter #google-cloud-firestore
# #трепетание #google-облако-firestore
Вопрос:
я пытаюсь добавить поля вложенной коллекции в список отзывов. Могу ли я узнать, как мне это сделать в части // Добавить в список //?
Коллекция «Отзывы» содержит 2 вложенных раздела, а именно «1» и «2». Оба ‘1’ и ‘2’ содержат карту из 4 полей.
Ниже приведены коды и скриншот firestore:
List<dynamic> reviewsList = [];
Future _getReviews() async{
firestore.collection('shops').doc(widget.shop.id).collection('reviews').get()
.then((reviews){
reviews.docs.forEach((result) {
firestore.collection('shops').doc(widget.shop.id).collection('reviews').doc(result.id)
.get().then((reviewDocumentSnapshot) {
// To add to List //
});
});
});
}
Комментарии:
1. сначала вы должны попробовать себя.
2. да, я пробовал, но, похоже, я не могу добавить его в список. Я могу только распечатать детали
Ответ №1:
проблема связана с неправильным пониманием асинхронности. измените свою функцию как
Future _getReviews() async{
var reviews = await firestore.collection('shops').doc(widget.shop.id).collection('reviews').get();
reviews.docs.forEach((result) {
var reviewDocumentSnapshot= await firestore.collection('shops').doc(widget.shop.id).collection('reviews').doc(result.id);
//add this snapshot to list.
reviewsList[your_object.fromJson(reviewDocumentSnapshot)];
});
}
и ваш модельный класс будет
class your_model {
String name;
String review;
int star;
String uid;
your_model({this.name, this.review, this.star, this.uid});
your_model.fromJson(Map<String, dynamic> json) {
name = json['name'];
review = json['review'];
star = json['star'];
uid = json['uid'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['name'] = this.name;
data['review'] = this.review;
data['star'] = this.star;
data['uid'] = this.uid;
return data;
}
}