Flutter实现丝滑的滑动删除、移动排序等-Dismissible控件详解

在这里插入图片描述

文章目录

  • Dismissible 简介
  • 使用场景
  • 常用属性
  • 基本用法举例
  • 注意事项

Dismissible 简介

Dismissible 是 Flutter 中用于实现可滑动删除或拖拽操作的一个有用的小部件。主要用于在用户对列表项或任何其他可滑动的元素执行删除或拖动操作时,提供一种简便的实现方式。

使用场景

  • 列表项删除: 允许用户在列表中通过滑动手势删除某个项。
  • 左右滑动: 提供可自定义的背景,当用户左滑或右滑时显示。
  • 拖拽排序: 可用于实现拖拽排序,当用户长按并拖动列表项时,可以将其拖到新的位置。
  • 任何需要滑动手势操作的场景: 适用于需要使用滑动手势进行操作的任何场景。

常用属性

  • key (Key? key): 小部件的标识符。通常使用数据项的唯一标识作为 key。

  • child (Widget child): 被包裹的小部件,即可滑动删除或拖拽的内容。

  • onDismissed (void Function(DismissDirection direction)? onDismissed): 在滑动操作完成时调用的回调函数。回调参数 direction 表示滑动的方向,是 DismissDirection 枚举的一个值。

  • direction (DismissDirection direction): 定义可滑动的方向。默认为 DismissDirection.horizontal,即水平方向。可以选择 DismissDirection.vertical、DismissDirection.endToStart、DismissDirection.startToEnd、DismissDirection.up、DismissDirection.down。

  • resizeDuration (Duration? resizeDuration): 控制小部件大小调整的动画时间。如果设置为 null,则禁用动画,小部件的大小将立即调整。默认值为 const Duration(milliseconds: 200)。

  • dismissThresholds (Map<DismissDirection, double>? dismissThresholds): 定义滑动多远触发 onDismissed 回调的阈值。键是 DismissDirection 枚举值,值是一个 double 类型,表示滑动的百分比。例如,{ DismissDirection.endToStart: 0.5 } 表示向左滑动超过 50% 触发回调。

  • movementDuration (Duration? movementDuration): 定义调整小部件位置的动画时间。默认为 const Duration(milliseconds: 200)。

  • crossAxisEndOffset (double crossAxisEndOffset): 当 direction 为 DismissDirection.horizontal 时,定义小部件在纵轴方向的偏移。正值表示向下偏移,负值表示向上偏移。默认为 0。

  • background (Widget? background): 定义在拖动时显示的背景。通常是一个按钮或图标,用于执行删除等操作。

  • secondaryBackground (Widget? secondaryBackground): 定义在拖动时显示的辅助背景,通常是一个按钮或图标,用于执行其他操作。当 direction 为 DismissDirection.horizontal 时,这是显示在右侧的背景。

  • confirmDismiss (Future Function(DismissDirection direction)? confirmDismiss): 一个可选的回调函数,用于在实际执行滑动删除或拖拽之前确认是否执行。如果返回 true,则执行删除或拖拽操作;如果返回 false,则取消操作。回调参数 direction 表示滑动的方向。

  • dragStartBehavior (DragStartBehavior? dragStartBehavior): 定义在拖动开始时处理拖动的方式。默认为 DragStartBehavior.start。

  • crossAxisStartDragOffset (double crossAxisStartDragOffset): 定义在纵轴方向上开始拖动的偏移量。正值表示向下偏移,负值表示向上偏移。默认为 0。

  • movementDurationVsCurrent} (bool? movementDurationVsCurrent): 在处理滑动时,如果设置为 true,将使用当前小部件的尺寸来计算移动的距离,而不是使用小部件被滑动前的尺寸。默认为 false。

这些属性提供了很多灵活性,可以根据具体需求来定制滑动删除或拖拽的交互效果。在使用时,根据具体情况选择合适的属性进行配置。

基本用法举例

Dismissible(key: Key(item.id.toString()), // 唯一标识,通常使用数据项的唯一标识onDismissed: (direction) {// 在用户滑动时调用,可以在这里执行删除等操作// direction 表示滑动的方向,是DismissDirection的枚举值之一// DismissDirection.horizontal 表示水平滑动// DismissDirection.vertical 表示垂直滑动// DismissDirection.endToStart 表示从右向左滑动(LTR语言环境)// DismissDirection.startToEnd 表示从左向右滑动(LTR语言环境)// DismissDirection.up 表示从下向上滑动// DismissDirection.down 表示从上向下滑动},background: Container(color: Colors.red, // 右滑或左滑时显示的背景颜色child: Icon(Icons.delete),),child: ListTile(title: Text(item.title),// 其他列表项的内容),
);

在这个例子中,Dismissible 包裹了一个 ListTile,表示列表中的一项。当用户滑动这个项时,onDismissed 回调会被触发,你可以在这里执行删除等操作。background 属性定义了右滑或左滑时显示的背景,可以包含图标、文字等。

注意事项

  • key 是必需的,通常使用数据项的唯一标识。这是用来标识 Dismissible 的唯一性,以确保正确的删除和排序。
  • 在 onDismissed 回调中,你需要执行具体的操作,例如从数据列表中删除对应的项。
  • direction 参数表示滑动的方向,可以用于根据不同的方向执行不同的操作。
  • background 属性定义了滑动时显示的背景,通常用来表示删除操作。
    总的来说,Dismissible 是一个非常实用的小部件,方便实现一些常见的滑动手势操作,特别适用于列表中的项。

结束语
Flutter是一个由Google开发的开源UI工具包,它可以让您在不同平台上创建高质量、美观的应用程序,而无需编写大量平台特定的代码。我将学习和深入研究Flutter的方方面面。从基础知识到高级技巧,从UI设计到性能优化,欢饮关注一起讨论学习,共同进入Flutter的精彩世界!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/288670.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于CTF探讨Web漏洞的利用与防范

写在前面 Copyright © [2023] [Myon⁶]. All rights reserved. 基于自己之前在CTF中Web方向的学习&#xff0c;总结出与Web相关的漏洞利用方法&#xff0c;主要包括&#xff1a;密码爆破、文件上传、SQL注入、PHP伪协议、反序列化漏洞、命令执行漏洞、文件包含漏洞、Vim…

回顾丨2023 SpeechHome 第三届语音技术研讨会

下面是整体会议的内容回顾&#xff1a; 18日线上直播回顾 18日上午9:30&#xff0c;AISHELL & SpeechHome CEO卜辉宣布研讨会开始&#xff0c;并简要介绍本次研讨会的筹备情况以及报告内容。随后&#xff0c;CCF语音对话与听觉专委会副主任、清华大学教授郑方&#xff0c…

(自适应手机版)全屏滚动装修装潢公司网站模板

(自适应手机版)全屏滚动装修装潢公司网站模板 PbootCMS内核开发的网站模板&#xff0c;该模板适用于装修公司网站、装潢公司网站类等企业&#xff0c;当然其他行业也可以做&#xff0c;只需要把文字图片换成其他行业的即可&#xff1b; 自适应手机版&#xff0c;同一个后台&a…

【漏洞复现】Apache Struts CVE-2023-50164

Struts2 官方披露 CVE-2023-50164 Apache Struts 文件上传漏洞&#xff0c;攻击者可利用该漏洞污染相关上传参数导致目录遍历&#xff0c;在具体代码环境中可能导致上传 Webshell&#xff0c;执行任意代码。 漏洞描述 Apache Struts2 是一个开源的 Java Web 应用程序开发框架&a…

ros2 学习03-开发工具vscode 插件配置

VSCode插件配置 为了便于后续ROS2的开发与调试&#xff0c;我们还可以安装一系列插件&#xff0c;无限扩展VSCode的功能。 中文语言包 Python插件 C插件 CMake插件 vscode-icons ROS插件 Msg Language Support Visual Studio IntelliCode URDF Markdown All in One VSCode支持的…

route 路由使用记录

一、路由的基本介绍 路由是计算机网络中的一个重要概念&#xff0c;它用于确定数据包从源地址到目的地址的路径。在网络中&#xff0c;路由器是负责转发数据包的设备。 下面是关于路由的基本知识和使用方法的介绍&#xff1a; 路由表&#xff1a;路由器通过路由表来确定数据包…

linux ARM64 处理器内存屏障

一、内存类型&#xff1a; ARMv8架构将系统中所有的内存&#xff0c;按照它们的特性&#xff0c;划分成两种&#xff0c;即普通内存和设备内存。并且它们是互斥的&#xff0c;也就是说系统中的某段内存要么是普通内存&#xff0c;要么是设备内存&#xff0c;不能都是。 1&…

乐理基础-情绪与速度、具体的速度、BPM

首先音乐中的一拍并不是一个具体的时间&#xff08;详情看这两个 认识音符、什么是一拍&#xff09;&#xff0c;一拍并不是1图6&#xff1a;秒、2秒、3秒这样一个具体的时间&#xff0c;只能说在同样一份乐谱和同样一个速度下&#xff0c;全音符、二分音符、四分音符等等会依次…

b站高可用架构 笔记

b站高可用架构 关键点&#xff1a;主机房&#xff0c;多活和多活机房 参考文章&#xff1a;bilibili技术总监毛剑&#xff1a;B站高可用架构实践 1. 前端和数据中心负载均衡 前端负载均衡(动态CDN):最近节点、带宽策略、可用服务容量 数据中心负载均衡:均衡流量、识别异常节…

jvm相关命令操作

查看jvm使用情况 jmap -heap PID 查看线程使用情况 jstack pid 查看当前线程数 jstack 21294 |grep -E (#[0-9]) -o -c 查看系统线程数 top -H top -Hp pid #查看具体的进程中的线程信息 使用 jps 命令查看配置了JVM的服务 查看某个进程JVM的GC使用情况 jstat -gc 进程…

独立搭建UI自动化测试框架分享

今天给大家分享一个seleniumtestngmavenant的UI自动化&#xff0c;可以用于功能测试&#xff0c;也可按复杂的业务流程编写测试用例&#xff0c;今天此篇文章不过多讲解如何实现CI/CD&#xff0c;只讲解自己能独立搭建UI框架&#xff0c;如果有其他好的框架也可以联系我&#x…

【Kafka每日一问】kafka中partition 的多个节点是分布在不同的broker上面吗

kafka中partition 的多个节点是分布在不同的broker上面吗 是的&#xff0c;Kafka中的partition(分区)会被复制到不同的broker上。每个partition都可以配置多个副本(replica)&#xff0c;这些副本都保存着相同的消息。当一个producer往这个partition写入消息时&#xff0c;消息…