dart - Flutter ListView 删除和撤消操作
问题描述
如何实现ListView
具有小部件的 a ,并且当我滑动时,我可以删除该项目,但是当点击 a的动作Dismissible
时如何将其恢复。SnackBar
谁能给我举个例子吗?这就是我在State
课堂上的表现。
List<String> _list = List.generate(10, (index) => "${index}");
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("App")),
body: ListView.builder(
itemCount: _list.length,
itemBuilder: (context, index) {
return Dismissible(
key: Key(_list[index]),
background: Container(color: Colors.red,),
child: ListTile(title: Text(_list[index])),
onDismissed: (direction) => setState(() => _list.removeAt(index))
);
},
)
);
}
解决方案
你所需要的只是
_list.insert(index, yourDeletedItem);
这是SnackBar
添加的完整代码。
GlobalKey<ScaffoldState> _key = GlobalKey(); // added
List<String> _list = List.generate(10, (index) => "${index}");
@override
Widget build(BuildContext context) {
return Scaffold(
key: _key, // added
appBar: AppBar(title: Text("App")),
body: ListView.builder(
itemCount: _list.length,
itemBuilder: (context, index) {
return Dismissible(
key: Key(_list[index]),
child: ListTile(title: Text(_list[index])),
background: Container(color: Colors.red),
onDismissed: (direction) {
setState(() {
// added this block
String deletedItem = _list.removeAt(index);
_key.currentState
..removeCurrentSnackBar()
..showSnackBar(
SnackBar(
content: Text("Deleted \"${deletedItem}\""),
action: SnackBarAction(
label: "UNDO",
onPressed: () => setState(() => _list.insert(index, deletedItem),) // this is what you needed
),
),
);
});
},
);
},
),
);
}
截屏
推荐阅读
- python - DJANGO HEROKU:django.db.migrations.exceptions.InconsistentMigrationHistory:
- java - Dynamodb 本地连接被 Java 拒绝
- azure - 如何在通过 ARM 模板创建部署时从系统变量中读取输入
- makefile - Makefile 动态变量作为先决条件
- c# - 停用组合框中的 SelectionChanged
- python - 将用户重定向到登录时的单独页面
- azure-devops - 如何在服务器(Windows 操作系统)上重新配置 Azure DevOps 代理?
- python - 如何在 python 上使用 pytesseract 阅读其他语言?
- python-3.x - 为什么我在 python3.7.3 上运行时会收到 opencv2 的 ImportError?
- javascript - 如何解决点 .01 返回 0 的两位小数问题