在从firestore中添加和删除项目时切换收藏按钮



我想使用firestore切换收藏按钮。当我最初单击它时,我想将其添加到集合中,然后再次单击应该从集合中删除该项目。我的问题是,我可以通过将文档名称设置为标题并使用标题引用简单地删除来实现这一点。这将在稍后产生问题,因为两个产品在技术上可以具有相同的名称。这就是为什么我想使用id有一个引用名,因为它是动态的。这是下面的代码:

try {
if (widget.product['isFavourited'] == true) {
String docId = widget.product.id;
// print(docId.toString());
// print(widget.product['isFavourited'].toString());
await FirebaseFirestore.instance
.collection('Products')
.doc(docId)
.update({'isFavourited': false}).then((value) async {
final CollectionReference collectionReference =
FirebaseFirestore.instance
.collection('Users')
.doc(uid)
.collection('Favourites');
await collectionReference
.doc()
.delete();
print('');
});
} else {
String docId = widget.product.id;
await FirebaseFirestore.instance
.collection('Products')
.doc(docId)
.update({'isFavourited': true}).then((value) async {
final CollectionReference collectionReference =
FirebaseFirestore.instance
.collection('Users')
.doc(uid)
.collection('Favourites');
final String id = collectionReference.doc().id;
final String itemtodelete = collectionReference.doc(id).id;
print(itemtodelete);
print(id);
await collectionReference.doc(itemtodelete).set({
'id': itemtodelete,
'title': widget.product['title'],
'price': widget.product['price'],
'about': widget.product['about'],
'description': widget.product['description'],
'imagepath': widget.product['imagepath'],
'isFavourited': widget.product['isFavourited'],
'isCarted': widget.product['isCarted'],
});
});

尝试一下,希望能有所帮助。

// productId is your productId = widget.product.id// uid is your current user id// favorite id is your each favorite documentId

Future<void> addToFavorite(String productId, String uid, favoriteId) async {
final productCollection = FirebaseFirestore.instance.collection("Products");
final favoriteCollection = FirebaseFirestore.instance.collection("Users").doc(uid).collection("Favorites");
final productDocReference = await productCollection.doc(productId).get();
if (productDocReference.exists) {

final favoriteDocReference = favoriteCollection.doc(favoriteId).get().then((favoriteDoc) {
if (!favoriteDoc.exists) {
favoriteCollection.doc(favoriteId).set({
'id': favoriteId,
'title': widget.product['title'],
'price': widget.product['price'],
'about': widget.product['about'],
'description': widget.product['description'],
'imagepath': widget.product['imagepath'],
'isFavourited': widget.product['isFavourited'],
'isCarted': widget.product['isCarted'],}).then((value){
productCollection.doc(productId).update({
"isFavourited": true
});
});
} else {
favoriteCollection.doc(favoriteId).delete().then((value) {
productCollection.doc(productId).update({
"isFavourited": false
});
});
}
});
}

}

考虑到我构造函数的方式,这段代码对我来说工作得很好。@Adnan Khan的回答真的很有帮助。我希望这能帮助到那些被卡住的人。

Future<String> addtoFavourites(QueryDocumentSnapshot data, String uid) async {
final CollectionReference collectionReference = FirebaseFirestore.instance
.collection('Users')
.doc(uid)
.collection('Favourites');
final String id = collectionReference.doc().id;
String docId = data.id;
try {
if (data['isFavourited'] == true) {
await FirebaseFirestore.instance
.collection('Products')
.doc(docId)
.update({'isFavourited': false}).then((value) async {
print(docId);
await collectionReference.doc(docId).delete();
return 'Removed from favourites';
});
} else {
await FirebaseFirestore.instance
.collection('Products')
.doc(docId)
.update({'isFavourited': true}).then((value) async {
print(docId);
print(id);
await collectionReference.doc(docId).set({
'id': docId,
'title': data['title'],
'price': data['price'],
'about': data['about'],
'description': data['description'],
'imagepath': data['imagepath'],
'isFavourited': true,
'isCarted': data['isCarted'],
});
});
}
notifyListeners();
return 'Added to favourites';
} catch (e) {
return e.toString();
}

最新更新