【发布时间】:2021-08-18 01:49:48
【问题描述】:
我创建了以下方法,使该项目成为最喜欢的项目,如下所示:
void petFavorite(String petId) {
FirebaseFirestore.instance
.collection('pets')
.doc(petId)
.collection('favorites')
.doc(userModel.uId)
.set({
'favorite': true,
}).then((value) {
emit(AppGetFavoritesSuccessState());
}).catchError((error) {
emit(AppGetFavoritesErrorState(error.toString()));
});
}
这是获取fire Store中所有数据的以下方法:
List<String> petsId = [];
List<PetsModel> pets = [];
void getPetsData() {
FirebaseFirestore.instance.collection('pets').get().then((value) {
value.docs.forEach((element) {
petsId.add(element.id);
pets.add(PetsModel.fromJson(element.data()));
});
emit(AppGetPetsSuccessState());
}).catchError((error) {
emit(AppGetPetsErrorState(error.toString()));
});
}
这是以下型号.. 宠物模型:
class PetsModel {
String image;
String name;
String gender;
String age;
String petType;
String price;
String type;
String distance;
PetsModel({
this.image,
this.name,
this.gender,
this.petType,
this.price,
this.age,
this.type,
this.distance,
});
PetsModel.fromJson(Map<String, dynamic> map) {
image = map['image'];
name = map['name'];
gender = map['gender'];
age = map['age'];
petType = map['animal_type'];
price = map['price'];
type = map['type'];
distance = map['distance'];
}
Map<String, dynamic> toMap() {
return {
'name': name,
'image': image,
'gender': gender,
'animal_type': petType,
'age': age,
'price': price,
'type': type,
'distance': distance,
};
}
}
用户模型:
class UserModel {
String name;
String email;
String phone;
String uId;
String image;
String cover;
String bio;
bool isEmailVerified;
UserModel({
this.name,
this.email,
this.phone,
this.uId,
this.image,
this.cover,
this.bio,
this.isEmailVerified,
});
UserModel.fromJson(Map<String, dynamic> json) {
email = json['email'];
name = json['name'];
phone = json['phone'];
uId = json['uId'];
image = json['image'];
cover = json['cover'];
bio = json['bio'];
isEmailVerified = json['isEmailVerified'];
}
Map<String, dynamic> toMap() {
return {
'name': name,
'email': email,
'phone': phone,
'uId': uId,
'image': image,
'cover': cover,
'bio': bio,
'isEmailVerified': isEmailVerified,
};
}
}
我尝试了以下代码,但它带来了所有宠物:
List<PetsModel> favoritePets = [];
void getFavoritePets() {
emit(AppGetFavoritePetsLoadingState());
FirebaseFirestore.instance.collection('pets').get().then((value) {
value.docs.forEach((element) {
element.reference.collection('favorites').where('favorite', isEqualTo: true).get().then((value) {
favoritePets.add(PetsModel.fromJson(element.data()));
});
});
});
}
这个方法获取userData:
UserModel userModel;
getUserData() {
emit(AppGetUserLoadingState());
FirebaseFirestore.instance.collection('users').doc(uId).get().then((value) {
userModel = UserModel.fromJson(value.data());
emit(AppGetUserSuccessState());
}).catchError((error) {
print(error.toString());
emit(AppGetUserErrorState(error.toString()));
});
}
我只需要每个用户最喜欢的宠物..
这是我正在研究的正确逻辑吗?或者我必须在每个用户而不是每个宠物中保存这个收藏夹?
所以现在我想创建一个从下面的集合中获取收藏夹的方法,如下图所示:
这是以下用户数据:
【问题讨论】:
标签: flutter dart google-cloud-firestore