flutter - 如何使用 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);
},
);
},
推荐阅读
- java - JSONObject 无法转换为 JSONArray Volley - Android
- c# - 以特定方式显示数据表中的数据
- markdown - 由 kramdown 呈现的 GitHub 风格的降价是否有最大数量的嵌套列表?
- javascript - 有没有办法通过用户输入连续移动 P5 中的对象?
- javascript - 如果按钮与 h1 在同一行,则按钮不起作用
- html - 如何使网格元素为其拥有的每个子元素都有一列?
- c# - EF Core 中的通用搜索实现
- cloud-foundry - 在所有 Pivotal Cloud Foundry 实例上执行 REST 调用
- python - Django 和 HTML 下拉菜单:使用选定的任一子属性填充父/子字段
- firebase - 如何使用flutter中的子值从firebase获取数据?