gpt4 book ai didi

dart - 无法在 onDismissible 中删除

转载 作者:行者123 更新时间:2023-12-03 03:42:08 24 4
gpt4 key购买 nike

我有一个代码,它在 ListView 中使用可忽略(显示数据库中的项目)。关闭一个项目后,它应该显示 snackbar ,但它没有显示它,似乎可关闭的项目仍然是树的一部分。你能帮我解决这个问题吗?

return ListView.builder(
itemCount: count,
itemBuilder: (BuildContext context, int position) {
final ThemeData theme = Theme.of(context);

return Dismissible(

key: Key(this.objs[position].id.toString()),
onDismissed: (direction) {
setState(() async {
int result = await helper.delete(this.objs[position].id);
});
Scaffold.of(context)
.showSnackBar(SnackBar(
content: Text(this.objs[position].title + "dismissed")));
},
background: Container(
color: Colors.red,
child: const ListTile(
leading: Icon(Icons.delete, color: Colors.white, size: 36.0)
)
),

child: ListTile(
leading: CircleAvatar(
backgroundColor: getColor(this.objs[position].priority),
child: Text(this.objs[position].id.toString()),
),
title: Text(obj[position].title),
subtitle: Text(objs[position].date),
onTap: () {
debugPrint("Tapped on " + objs[position].id.toString());
navigateToDetail(this.objs[position]);
},
),
);
},
);

这在 Scaffold 内部被调用。 objs 是一个列表,其中包含我在数据库中的所有对象。

这是我在 onDismissed 中调用的删除代码:
    Future<int> delete(int id) async {
Database db = await this.db;
var result = await db.rawDelete("DELETE FROM $tblT WHERE $colId=$id");
return result;
}

我注意到如果我删除一个项目,然后立即尝试创建另一个项目(我可以选择插入数据库):
它有时会抛出错误:已关闭的 Dismissible 小部件仍然是树的一部分

更新 :
在 setState 之前移动了删除部分,我收到错误消息:每次我滑动关闭时,已关闭的 Dismissible 小部件仍然是树的一部分

最佳答案

您可以为 onDismissed: 尝试以下代码属性(property)。

问题是 onDismissed 函数内部的 future 。我们需要重新排序 async 和 await 关键字。

无论如何,在删除连续项目时要注意时间。

onDismissed: (direction) async {
String title = this.obj[position].title;
await helper.delete(this.obj[position].id);
setState(() {});
Scaffold.of(context)
.showSnackBar(SnackBar(content: Text("$title dismissed")));
},

它还将异步移出 setState()并存储标题以供 SnackBar 稍后使用.

关于dart - 无法在 onDismissible 中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52726994/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com