第三十三回:如何在Dismissible Widget中有效地删除内容

本文介绍了如何在Flutter中使用DismissibleWidget有效删除ListView内容。通过设置confirmDismiss属性,结合对话框确认操作,实现用户确认后删除列表项的功能。示例代码展示了具体实现过程,包括创建对话框和监听用户选择以决定是否删除。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


我们在上一章回中介绍了 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中有效地删除内容就介绍到这里,欢迎大家在评论区交流与讨论!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值