当前位置: 首页 > news >正文

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.lryc.cn/news/263947.html

相关文章:

  • JDK bug:ciObjectFactory::create_new_metadata:原因完全解析
  • 【数据结构】并查集的简单实现,合并,查找(C++)
  • 2023美团商家信息
  • 0155 - Java 数组
  • Java 语言有哪些特点
  • SAP 特殊采购类50简介----虚拟件
  • C语言——内存函数的使用与模拟实现
  • Mysql索引事务(面试高频)
  • SpringCloudGateway 3.1.4版本 Netty内存泄漏问题解决
  • STM32内部是怎么工作的
  • MyBatis的配置文件
  • MCU平台下确定栈空间大小的方法
  • Flink系列之:SQL提示
  • 机器学习算法---聚类
  • gitlab ci pages
  • Web ML 库的Transformers.js 提供文本转语音功能
  • 管理类联考——数学——真题篇——按题型分类——充分性判断题——蒙猜E
  • 【Linux基本指令(2)】
  • Debian系统设置SSH密钥登陆
  • uniapp cli开发和HBuilderX开发
  • 【Java异常】idea 报错:无效的目标发行版:17 的解决办法
  • 代码提交规范-ESLint+Prettier+husky+Commitlint
  • 手动实现 Vue 3的简易双向数据绑定(模仿源码)
  • LVS最终奥义之DR直接路由模式
  • t-SNE高维数据可视化实例
  • 配置应用到k8s
  • (四)STM32 操作 GPIO 点亮 LED灯 / GPIO工作模式
  • 你知道跨站脚本攻击吗?一篇带你了解什么叫做XSS
  • JVM入门
  • Cmake基础(5)