Flutter的手势识别功能实现GestureDetector

news2024/10/7 12:29:16

GestureDetector简介

GestureDetector 是 Flutter 中一个非常常用的小部件,它提供了许多手势识别的功能,包括点击、双击、长按、拖动、缩放等等。

使用方法

GestureDetector 可以包裹其他部件,当用户在这些部件上进行手势操作时,GestureDetector 会捕捉这些手势操作并触发相应的回调函数。

常用的回调函数

GestureDetector 的构造函数接受一个 GestureDetector.onTap 的回调函数作为参数,这个回调函数会在用户点击该部件时被触发。除了 onTap 外,GestureDetector 还有很多其他的回调函数,包括:

  • onDoubleTap:双击回调函数。
  • onLongPress:长按回调函数。
  • onPanStartonPanUpdateonPanEnd:拖动回调函数。
  • onScaleStartonScaleUpdateonScaleEnd:缩放回调函数。

除了这些回调函数之外,GestureDetector 还有其他属性,比如:

  • behavior:用于控制手势处理的行为,可以是 HitTestBehavior.deferToChild(默认值,将手势传递给子部件),HitTestBehavior.opaque(将手势作为不透明的处理,不会传递给子部件)或HitTestBehavior.translucent(将手势作为透明的处理,会传递给子部件)。
  • excludeFromSemantics:用于控制该部件是否应该在语义树中排除掉。
  • dragStartBehavior:用于控制拖动开始的行为,可以是 DragStartBehavior.start(默认值,拖动开始时立即触发),DragStartBehavior.down(仅在手指按下并移动一定距离后触发)或 DragStartBehavior.deferred(仅在手指停止移动后触发)。

举例说明

下面是一个示例代码,演示如何使用 GestureDetector 来捕捉用户的手势操作:

import 'package:flutter/material.dart';

class TestPage extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return Scaffold(
      body: GestureDetector(
        onTap: () {
          print('onTap');
        },
        onDoubleTap: () {
          print('onDoubleTap');
        },
        onLongPress: () {
          print('onLongPress');
        },
        onPanStart: (DragStartDetails details) {
          print('onPanStart: $details');
        },
        onPanUpdate: (DragUpdateDetails details) {
          print('onPanUpdate: $details');
        },
        onPanEnd: (DragEndDetails details) {
          print('onPanEnd: $details');
        },
        child: Container(
          width: 200,
          height: 200,
          color: Colors.blue,
          child: Center(
            child: Text('GestureDetector'),
          ),
        ),
      ),
    );
  }
}

效果图如下:
image.png
打印如下:
image.png
在这个示例中,我们创建了一个 GestureDetector,并为其设置了多个回调函数,分别对应不同的手势操作。在 child 属性中,我们使用一个 Container 来展示这个 GestureDetector,当用户在这个 Container 上进行手势操作时,GestureDetector 会捕捉这些操作并触发相应的回调函数。

需要注意的是,GestureDetector 仅能捕捉与其子部件重叠的手势操作。如果需要在整个屏幕上捕捉手势操作,可以使用 GestureDetector 的祖先部件 GestureDetectorRawGestureDetector

缩放的例子

import 'package:flutter/material.dart';

class TestPage extends StatelessWidget {
  
  Widget build(BuildContext context) {
    double scaleFactor = 1.0;
    Offset offset = Offset(0, 0);
    return Scaffold(
      body: GestureDetector(
        onTap: () {
          print('onTap');
        },
        onDoubleTap: () {
          print('onDoubleTap');
        },
        onLongPress: () {
          print('onLongPress');
        },
        onScaleStart: (ScaleStartDetails details) {
          print('用户开始缩放');
        },
        onScaleUpdate: (ScaleUpdateDetails details) {
          print('用户缩放中...当前缩放比例:${details.scale}');
          scaleFactor *= details.scale;
        },
        onScaleEnd: (ScaleEndDetails details) {
          print('用户结束缩放');
        },
        child: Transform.scale(
          scale: scaleFactor,
          child: Transform.translate(
            offset: offset,
            child: Container(
              width: 200,
              height: 200,
              color: Colors.red,
            ),
          ),
        ),
      ),
    );
  }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SSM的网辩平台的设计与实现

摘 要 线上作为当前信息的重要传播形式之一,线上辩论系统具有显著的方便性,是人类快捷了解辩论信息、资讯等相关途径。但在新时期特殊背景下,随着网辩的进一步优化,辩论赛结合网络平台融合创新强度也随之增强。本文就网辩平台进…

尧泰汉海五城联动,“益”起圆梦!用爱守护成长,助力502名孩子实现心愿

公益的力量让孩子们的梦想被看见。 文具套装、书包、篮球 、益智积木、生日蛋糕......一个个看似小小的心愿,对于城市里的孩子来说是平常不过的礼物,但却成了许多正处于困境孩子的期待。 本次活动由重庆市慈善总会指导,Home尧泰汉海慈善专项…

【项目】ROS下使用乐视深度相机LeTMC-520

本文主要记录如何在ros下使用乐视深度相机。乐视三合一体感摄像头LeTMC-520其实就是奥比中光摄像头(Orbbec Astra Pro) 系统:Ubuntu20.04 这款相机使用uvc输入彩色信息,需要使用libuvc、libuvc_ros才能在ROS上正常使用彩色功能。…

k8s实战2-用minikube发布本地应用

官网的教程中,hello-minikube其镜像都在网上(dockerhub)上,如何把本地打包的docker镜像发布到minikube中 1 终端上运行eval $(minikube docker-env) 此命令的作用是使用Minikube Docker守护进程,跟原来docker desktop的docker进程区别开来 …

FPGA深层解析

概览 高端设计工具为少有甚是没有硬件设计技术的工程师和科学家提供现场可 编程门阵列(FPGA)。无论你使用图形化设计程序,ANSI C语言还是VHDL语言, 如此复杂的合成工艺会不禁让人去想FPGA真实的运作情况。在这个芯片中的程 序在这些可设置硅片间到底是如何工作的。本书会使…

腾讯云2核4G5M服务器性能如何?来说说CPU内存带宽系统盘

腾讯云轻量应用服务器2核4G5M配置一年168元,三年628元,100%CPU性能,5M带宽下载速度640KB/秒,60GB SSD系统盘,月流量500GB,折合每天16.6GB流量,超出月流量包的流量按照0.8元每GB的支付流量费&…

SKY13330-397LF国产替代ATR5330 SUB-1G SPDT开关芯片

1.1 芯片简介 ATR5330是一款采用CMOS SOI工艺制作的单刀双掷开关单芯片,该芯片的推荐工作频率20MHz-4GHz, 开关芯片采用单电源供电控制,有非常低的电流功耗。开关开启工作时有非常低的插入损耗以及非常高的线性度。 1.2主要特征 频率范围: 0.…

项目管理:如何利用工具做好工作汇报?

我们公司曾经经历了一次惨痛的教训。我们为一家重要的大客户提供咨询服务,但在项目结束时,我们的项目负责人在电梯间遇见了客户的总经理,被问及项目结果时,却无法在短时间内清晰地表达出来。这一失误导致我们失去了这位重要客户。…

什么是跳表

什么是跳表 跳表全称为跳跃列表,它允许快速查询,插入和删除一个有序连续元素的数据链表。跳跃列表的平均查找和插入时间复杂度都是O(logn)。快速查询是通过维护一个多层次的链表,且每一层链表中的元素是前一层链表元素的子集(见右…

【Redis】Redis 内存回收

文章目录 1. 过期key处理1.1 惰性删除1.2 周期删除 2. 内存淘汰策略 Redis 中数据过期策略采用定期删除惰性删除策略结合起来,以及采用淘汰策略来兜底。 定期删除策略:Redis 启用一个定时器定时监视所有的 key,判断key是否过期,过…

大语言模型技术原理

在今天这个时代,人们的工作和生活已经离不开数据访问,而几乎所有平台背后的数据存储和查询都离不开数据库。SQL作为一种数据库的查询和处理语言历史悠久,最早由IBM于上世纪70年代初研究关系数据模型时提出,后续发展为一种广泛使用…

Python实战基础15-匿名函数,高阶函数

1、匿名函数 用lambda关键词能创建小型匿名函数,这种函数得名于省略了用def声明函数的标准步骤。 lambda函数的语法只包含一个语句,如下: lambda 参数列表: 运算表达式 如下实例: sum lambda arg1,arg2:arg1 arg2…

Coursera—Andrew Ng机器学习—课程笔记 Lecture 5 Octave Tutorial

未完待续。。。。。 5.1 基本操作 参考视频: 5 - 1 - Basic Operations (14 控制输出格式的长短 min).mkv 5.1.1 简单运算 不等于符号的写法是这个波浪线加上等于符号 ( ~ ),而不是等于感叹号加等号( ! ) 1 1 1   % 判断相等 2 1 ~ 2   % 判断不等 3 …

【AUTOSAR】Com通讯栈配置说明(一)---- Can模块

通讯栈 模块 项目通讯栈 主要包含如下几个模块: 各模块详细配置说明 Can模块 这部分最终会导入到EB 中,通过EB 生成CanDriver 代码, 具体参数的介绍已经在EB 配置说明中介绍过。 CanController ​​​​​​​CanHaredWareObject 以其中一…

Unity3D:2D/3D 项目

推荐:将 NSDT场景编辑器 加入你的3D工具链 3D工具集: NSDT简石数字孪生 2D 还是 3D 项目 无论是创建 2D 还是 3D 游戏,Unity 都很拿手。在 Unity 中创建新项目时,可以选择以 2D 或 3D 模式启动。您可能已经知道要构建什么&#x…

1-网络初识——网络发展史

目录 1.独立模式 2.网络互联 2.1.局域网(Local Area Network,简称LAN) ①基于网线直连 ②基于集线器组建 ③基于交换机组建 ④基于交换机(网口很多)和路由器组建 2.2.广域网(Wide Area Network&…

MySQL新身份验证插件caching_sha2_password

同事反馈了一个问题,MySQL客户端连接数据库的时候,提示这个错误, ERROR 2059 (HY000): Plugin caching_sha2_password could not be loaded: /usr/lib64/mariadb/plugin/caching_sha2_password.so: cannot open shared object file: No suc…

中国码农生存现状调查

传说中的码农到底是一种什么样的存在。 程序员一直都是一个备受人们关注的群体。据IDC统计,全球约有1850万名程序员,中国占10%。随着近年全国互联网创业热潮的兴起,“互联网”、“云计算”以及“智能硬件”等领域发展迅速,市场对…

微信小程序开发需要多少钱?

近几年来,微信小程序开发行业发展迅猛,可以说是未来的一个趋势,它不仅能在用户体验上更好,而且也能有效地提升商家的营业额。目前来说,小程序开发主要有模板小程序、定制小程序两种,模板小程序的价格比较低…

IO多路复用详解

文章目录 基本概念select系统调用详解select函数定义select的底层原理select的优缺点 poll系统调用详解poll函数定义调用poll的底层原理poll的优缺点 epoll系统调用详解epoll相关的函数定义epoll的底层原理epoll的优缺点 ET vs LT基本概念epoll_ctl模式设置 应用场景基于IO多路…