我有一个ListView,其中充满了Firebase集合作为聊天消息。
当用户长按ListTile(列表中的一项)时,我会显示一个BottomSheet。
当用户单击BottomSheet上的Delete
按钮时,应删除文档。点击“删除”按钮后,我找不到删除所选文档的方法。
列表视图小部件:
return ListView.builder(
padding: new EdgeInsets.all(8.0),
reverse: true,
itemCount: snapshot.data.documents.length,
itemBuilder: (_, int index) {
var message = snapshot.data.documents[index]["content"];
var from = snapshot.data.documents[index]["idFrom"];
return new ListTile(
leading: new CircleAvatar(
backgroundColor: Colors.blue,
child: new Image.network(
"http://res.cloudinary.com/kennyy/image/upload/v1531317427/avatar_z1rc6f.png")),
title: new Row(
children: <Widget>[
new Expanded(child: new Text(message))
]
),
subtitle: new Text(from),
onLongPress: () {
showModalBottomSheet<void>(context: context,
builder: (BuildContext context) {
return Container(
child: new Wrap(
children: <Widget>[
new ListTile(
leading: new Icon(Icons.delete),
title: new Text('Delete'),
onTap: () =>
// Remove the tapped document here - how?
print(snapshot.data.documents[index]["id"])
Firestore.instance.collection("chats").document("ROOM_1")
.collection("messages").document(snapshot.data.documents[index]["id"])
.delete();
)
)
]
)
);
});
}
);
});
我需要找到一种方法来删除onTap()
方法中的文档。不知道为什么,但是即使我这样做:
onTap: () => {
// Remove the tapped document here - how?
const id = snapshot.data.documents[index]["id"];
},
IDE重新运行错误Expected an identifier
答案 0 :(得分:0)
要删除文档,我们可以使用runTransaction
的{{1}}方法和Firestore.instance
类的delete
方法。
Transaction
代替
await Firestore.instance.runTransaction((Transaction myTransaction) async {
await myTransaction.delete(snapshot.data.documents[index].reference);
});
这是删除Firestore.instance.collection("chats").document("ROOM_1")
.collection("messages").document(snapshot.data.documents[index]["id"])
.delete();
文档之前我的虚拟数据库的外观:
删除doc1
后:
答案 1 :(得分:0)
如果您知道文档ID,则可以轻松删除。
Future<void> rejectJob(String jobId){
return _db.collection('jobs').document(jobId).delete();
}
答案 2 :(得分:0)
将以下代码添加到按钮的 onPressed
方法中。
final collection = FirebaseFirestore.instance.collection('collection');
collection
.doc('some_id') // <-- Doc ID to be deleted.
.delete() // <-- Delete
.then((_) => print('Deleted'))
.catchError((error) => print('Delete failed: $error'));