私はを返しstreamBuilder
、streamBuider内で、ウィジェットを返します。
これで、cloud_firestoreのコレクションからドキュメントを削除できるように、ウィジェットをdismissibleでラップしました。
showingTheSelectedDateEvents() {
List<Widget> listViewContainer = [];
return StreamBuilder<QuerySnapshot>(
stream: firestoreInstance.collection('eventDetails').snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(
backgroundColor: Colors.lightBlueAccent,
),
);
}
String theDatabaseDate;
final allDocuments = snapshot.data.docs;
//here we get all the documents from the snapshot.
for (var i in allDocuments) {
theDatabaseDate = i.data()['dateTime'];
if (theDatabaseDate == theDataProvider.databaseSelectedDate) {
print(theDatabaseDate +
" is same as " +
theDataProvider.databaseSelectedDate);
listViewContainer.add(Dismissible(
key: ObjectKey(snapshot.data.docs.elementAt(0)),
onDismissed: (direction) {
firestoreInstance
.collection("eventDetails")
.doc()
.delete()
.then((_) {
print("success!");
});
},
child://here
));
print(listViewContainer.length);
} else {
print("no any events for today");
}
}
return Expanded(
child: ListView(
reverse: true,
padding: EdgeInsets.symmetric(horizontal: 10.0, vertical: 20.0),
children: listViewContainer,
),
);
},
);
}
cloud_firestoreからデータを削除するためにこれを試しました
key: ObjectKey(snapshot.data.docs.elementAt(0)),
onDismissed: (direction) {
firestoreInstance
.collection("eventDetails")
.doc()
.delete()
.then((_) {
print("success!");
});
},
コレクションから特定のドキュメントを削除したいのですが、
その方法がわかりません。
これがデータベースモデルです
eventDetails
コレクションのドキュメントを削除しようとしています。
doc()
は新しいランダムIDを生成するため、IDにアクセスできない場合は、次の手順を実行する必要があります。
FirebaseFirestore.instance
.collection("eventDetails")
.where("chapterNumber", isEqualTo : "121 ")
.get().then((value){
value.docs.forEach((element) {
FirebaseFirestore.instance.collection("eventDetails").doc(element.id).delete().then((value){
print("Success!");
});
});
});
where()
条件を使用して必要なドキュメントを取得し、削除します。
あなたのコードであなたが使用しているので:
return StreamBuilder<QuerySnapshot>(
stream: firestoreInstance.collection('eventDetails').snapshots(),
ここでは、の下eventDetails
にあるすべてのドキュメントをフェッチしているため、ドキュメントに一意のフィールドを追加して、forループ内でIDを取得できます。
for (var i in allDocuments) {
if(i.data()["subject"] == "Mathemtics")
docId = i.id;
そして、あなたはそれを削除することができます:
onDismissed: (direction) {
FirebaseFirestore.instance
.collection("eventDetails")
.doc(docId)
.delete()
.then((_) {
print("success!");
});
},
このようにして、ドキュメントを2回フェッチする必要はありません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加