如何使用Dissmissable从Itembuilder中删除项目,并且该项目来自Firestore?

问题描述

  @override
      Widget build(BuildContext context) {
        final textTheme = Theme.of(context).textTheme;
        return Scaffold(
          body: StreamBuilder<QuerySnapshot>(
            stream: Firestore.instance
                .collection('users')
                .document(widget.uid)
                .collection('lists')
                .snapshots(),builder: (context,snapshot) {
              return !snapshot.hasData
                  ? Center(child: CircularProgressIndicator())
                  : ListView.builder(
                      itemCount: snapshot.data.documents.length,itemBuilder: (context,index) {
                        DocumentSnapshot data = snapshot.data.documents[index];
                        final list = snapshot.data.documents;
                        return dismissible(
                          // dismissed function
                          key: UniqueKey(),ondismissed: (dismissDirection direction) {
                            setState(() {
    
                              // This is where I would like to remove the element
                              // snapshot.data.remove(index);
                              
                            });
                          },secondaryBackground: Container(
                            child: Center(
                              child: Text('Delete',style: TextStyle(color: Colors.white),textAlign: TextAlign.start),),color: Colors.red,background: Container(),child: Card(
                            child: Center(
                              child: new Container(
                                padding: new EdgeInsets.all(32.0),child: new Column(
                                  children: <Widget>[
                                    new Text(data['listName']),new Text(data['Description'])
                                  ],direction: dismissDirection.endToStart,);
                      },);
            },
  • 整个目标是使卡片元素消失并从Firestore中删除该项目。
  • 我考虑过将每件物品放入地图,然后根据地图制作卡片。我宁愿不那样做。

希望得到任何帮助,我们可以一起解决此问题:)

提前谢谢!

解决方法

首先通过以下操作获取文档参考:

依次访问:snapshot.data.documents,然后snapshot.data.documents[i].documentID

然后这个:

onDismissed: (direction) async {
    await Firestore.instance.runTransaction(
      (transaction) async {
        await transaction.delete(your doc ref here);
      },);
  },