Flutter:功能型组件(3)- 拖拽组件、缩放平移组件

news/2024/11/29 13:29:45/

拖拽组件

拖拽组件包含 DraggableLongPressDraggableDragTarget

DraggableLongPressDraggable 为可拖拽的组件,LongPressDraggable 继承自Draggable,因此用法和 Draggable 完全一样,唯一的区别就是 LongPressDraggable 触发拖动的方式是长按,而 Draggable 触发拖动的方式是按下。

DragTarget 为拖拽组件的目的地组件。

Draggable

Draggable(// axis: Axis.vertical,     // 默认是可以随意拖动,可以通过axis属性设置只允许横向(纵向)拖动// 拖拽时显示的组件feedback: Container(height: 100,width: 100,color: Colors.blue,),// 正常显示的组件child: Container(height: 100,width: 100,color: Colors.red,),onDragStarted: () {print("开始拖动");},onDragEnd: (DraggableDetails details) {print("拖动完成:$details");},onDraggableCanceled: (Velocity velocity, Offset offset) {print("未拖动到目标位置,结束位置是:($velocity,$offset)");},onDragCompleted: () {print("拖动到目标位置");});

在这里插入图片描述在这里插入图片描述

DragTarget

DragTarget就像他的名字一样,指定一个目的地,Draggable组件可以拖动到此控件

class _YcHomeBodyState extends State<YcHomeBody> {Color _color = Colors.yellow;Color _color1 = Colors.red;Color _color2 = Colors.transparent;Widget build(BuildContext context) {return Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[Draggable<Color>(data: _color,feedback: Container(width: 100,height: 100,color: _color.withOpacity(0.5),),childWhenDragging: Container(width: 100,height: 100,color: Colors.grey,),child: Container(width: 100,height: 100,color: _color,),),const SizedBox(height: 50),DragTarget<Color>(onWillAccept: (color) => true,onAccept: (color) {setState(() {_color2 = color;_color = _color1;_color1 = color;});},onLeave: (color) {},builder: (context, candidateData, rejectedData) {return Container(width: 100,height: 100,color: _color1,);},),],),);}
}

DragTarget组件中有4个onWillAcceptonAcceptonLeavebuilder。其中,builder用于构建DragTarget的UI,另外3个用于处理拖拽操作。
candidateData参数表示当前拖拽过程中,DragTarget接受拖拽数据的候选数据。如果onWillAccept返回true,则candidateData就会被传递给onAccept函数

rejectedData参数表示当前拖拽过程中,DragTarget拒绝接受拖拽数据的数据。如果onWillAccept返回false,则rejectedData就会被传递给builder函数,用于构建拒绝接受拖拽数据的UI。

当拖拽对象从 DragTarget 区域内移动到 DragTarget 区域外时,onLeave 回调函数会被调用。
在这里插入图片描述

缩放平移组件

Flutter中的InteractiveViewer是一个可交互的小部件,它允许用户在屏幕上缩放、平移和旋转其子小部件。它可以用于显示大型图像、地图、PDF文档等。

Center(child: InteractiveViewer(boundaryMargin: const EdgeInsets.all(20), // 边界的空白区域minScale: 0.5, // 最小缩放maxScale: 2.0, // 最大缩放onInteractionStart: (details) {print('开始交互!');},onInteractionEnd: (details) {print('结束交互');},child: Image.network("https://scpic.chinaz.net/files/default/imgs/2022-10-20/0a7de58e808d2f04.jpg"),));

在这里插入图片描述


http://www.ppmy.cn/news/182552.html

相关文章

python str转unicode

当你的字符串中有 \u573a\u666f\u6570\u636e\u8868. 这种, 这其实是字符串中的东西是用unicode编码的, 跟这个字符串是不是unicode没关系, 是字符串的内容用的unicode, 所以明白了这一点就很简单了 x \u573a\u666f\u6570\u636e\u8868. print x.decode("unicode-escape&q…

物联网 - Android系统的USB权限处理

最近一直在给自己做减法&#xff0c;所以将之前保存的书签和未记录的成长一起整理 - 归纳 - 输出&#xff0c;此处主要记录了在开发售货机app时&#xff0c;因usb权限未开启&#xff0c;从而导致硬件设备的打印功能&#xff08;USB OTG 通信&#xff09;无法调用的场景处理。 所…

串口通讯的配置

串口以及中断的配置&#xff1a; #if EN_USART1_RX //如果使能了接收 //串口1中断服务程序 //注意,读取USARTx->SR能避免莫名其妙的错误 u8 USART_RX_BUF[USART_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节. //接收状态 //bit15&#xff0c; 接收完成标志 //b…

unicode和中文互相转换

提示&#xff1a; encode 编码 decode 解码 正文&#xff1a; text 爱你呦‘ # 将中文转换为Unicode编码 text_unicode text.encode(unicode-escape).decode() print(text_unicode) #\u7231\u4f60\u5466 # 将Unicode编码转换为中文 # text_Chinese text_…

【单片机】继电器控制

【单片机】继电器控制 一、操作目的二、操作内容三、预备知识四、操作接线图五、程序清单六、代码详解 一、操作目的 掌握用继电器的基本方法和编程。 二、操作内容 利用P1口输出高低电平,控制继电器的开合,以实现对外部装置的控制。 三、预备知识 现代自动控制设备中都存在一个…

全国地区代码表

天津市 地区代码地区名称1100天津市 辽宁省 地区代码地区名称2210沈阳市2210法库县2210康平县2210辽中县2210新民市2220大连市2222普兰店市2223庄河市2224瓦房店市2225长海县2230鞍山市2231台安县2232海城市2240抚顺市2241抚顺县2242新宾县2243喀左县2250本溪市2251本溪县2252桓…

全国地区代码科普

2019独角兽企业重金招聘Python工程师标准>>> 全国地区代码表 天津市 地区代码 地区名称 1100 天津市 辽宁省 地区代码 地区名称 2210 沈阳市 2210 法库县 2210 康平县 2210 辽中县 2210 新民市 2220 大连市 2222 普兰店市 2223 庄河市 2224 …

I.MX6ull 中断 二 (按键驱动蜂鸣器)

按键中断 KEY0 &#xff08;UART1_CTS 引脚&#xff09;触发蜂鸣器 1 修改start.S 添加中断相关定义 中断向量表 .global _start /* 全局标号 *//** 描述&#xff1a; _start函数&#xff0c;首先是中断向量表的创建* 参考文档:ARM Cortex-A(armV7)编程手册V4.0.pdf P…