我们在上一章回中介绍了
Dismissible
Widget相关的内容,本章回中将介绍
如何在Dismissible Widget中有效地删除内容.闲话休提,让我们一起Talk Flutter吧。
概念介绍
我们在上一章回中介绍了如何使用Dismissible组件来删除ListView中的内容,本质上是通过删除与ListView绑定的数据源中的数据(就是List中的数据),然后再刷新界面来删除ListView中的项目。本章回将介绍另外一种删除ListView中项目的方法,而且该方法是官方推荐的方法。
使用方法
整体的思路是使用confirmDismiss
属性对应方法中的返回值来删除ListView中的内容。如果方法返回true就删除内容,否则不删除内容。下面是详细的实现方法:
- 1.创建boolen类型的变量,该变量用来充当返回值;
- 2.在confirmDismiss属性对应的方法中创建一个对话窗口,窗口中包含yes和no两个按钮;
- 3.如果用户选择yes那么返回true,此时该内容就会被删除;否则返回false,该内容继续保留在ListView中;
示例代码
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.purpleAccent,
title: const Text("Example of Dismissible"),
),
body: ListView.builder(
itemCount: 8,
itemBuilder: (context, index) {
return Dismissible(
// key: Key(arrayList[index]),
//使用上面方法中的key会有运行时错误,提示没有删除内容
key: UniqueKey(),
//是否确定删除当前的item,返回true删除,否则不删除
confirmDismiss: (dirction) async {
bool _result = false;
await showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text("Notice"),
actions: [
TextButton(
onPressed: () {
Navigator.of(context).pop();
arrayList.removeAt(index);
print("$index is deleted");
// arrayList.removeAt(index);
_result = true;
},
child: Text("Yes"),
),
TextButton(
onPressed: () {
_result = false;
Navigator.of(context).pop();
},
child: Text("No"),
),
],
);
},
);
return _result;
},
//确定删除后调用,在confirmDismiss后调用
onDismissed: (direction) {
print("onDismissed");
},
child: ListTile(
title: Text(arrayList[index]),
),
);
},
),
);
我们在这里只列出了核心代码,完整的代码可以查看Github上Ex_018
文件中的内容。编译并且运行上面的程序就会生成一个ListView,然后滑动ListView中的某个内容就会弹出一个对话框,选择对话框中的Yes就可以删除内容。我在这里就不演示程序运行结果了,建议大家自己动手去实践。
看官们,关于如何在Dismissible Widget中有效地删除内容就介绍到这里,欢迎大家在评论区交流与讨论!