flutter 的webview中touchstart和touchend 执行异常问题解决

news2024/9/27 7:18:40

效果

背景

使用flutter 调用webview内网页,网页内容是监听touchstart和 touchend,触发不同是事件,但是发现每次长按都 手指抬起后 才会执行 touchstart和touchend,满足不了我的需求,我的需求是当手指按下 立即执行touchstart,手指拿来再执行 touchend。

解决方案

抛弃浏览器事件,利用自定义事件,进行flutter 调用,控制事件的执行

网页端 绑定 document 的 onLongPressDown 和 onLongPressUp 事件。

  // 监听按下事件
    document.addEventListener("onLongPressDown", () => {
        window.callAppMethod("onLongPressDown", {
          status: this.state === LittleMan.STATE.init,
        });
        // 开始蓄力
        if (this.state === LittleMan.STATE.init) {
          this.state = LittleMan.STATE.storage;
          // 粒子聚集
          this.particle.gather(this.body);
          // 形变
          this.storage();
        }
    });
    // 监听松开事件
    document.addEventListener("onLongPressUp", () => {
        window.callAppMethod("onLongPressUp", {
          status: this.state === LittleMan.STATE.storage,
        });
        if (this.state === LittleMan.STATE.storage) {
          this.state = LittleMan.STATE.jumping;
          // 停止粒子聚集
          this.particle.stopGather();

          // 跳跃
          this.jump();
        }
    });

flutter 端 通过GestureDetector 监听事件的执行,然后通过  webview的 controller 进行触发网页内的事件执行。

GestureDetector(
          onLongPress: () async {
            controller.runJavaScript(
                "document.dispatchEvent(new Event('onLongPressDown'))");
          },
          onLongPressDown: (d) {
            print("onLongPressDown");
            // controller.runJavaScript(
            //     "document.dispatchEvent(new Event('onLongPressDown'))");
          },
          onLongPressUp: () {
            print("onLongPressUp");
            controller.runJavaScript(
                "document.dispatchEvent(new Event('onLongPressUp'))");
          },
          child: WebViewWidget(
            controller: controller,
          ),
        ),

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

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

相关文章

aws emr启动standalone的flink集群

关键组件 Client,代码由客户端获取并做转换,之后提交给JobMangerJobManager,对作业进行中央调度管理,获取到要执行的作业后,会进一步处理转换,然后分发任务给众多的TaskManager。TaskManager,数…

解决mybatis/mybatis plus报错:Invalid bound statement (not found) 的方法汇总

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题,即在mybatis中dao接口与mapper配置文件在做映射绑定的时候接口与xml不匹配,要么是找不到,要么是找到了却匹配不到。 我的问题是项目没有把最新的方法x…

操作系统实验--终极逃课方法

找到图片里的这个路径下的文件 ,结合当前题目名称,把文件内容全部删除,改为print print的内容为下图左下角的预期输出的内容

Databend 开源周报第 146 期

Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 支持 Expressio…

Rocky Linux 9.4 正式版发布 - RHEL 100% 1:1 兼容免费发行版

Rocky Linux 9.4 正式版发布 - RHEL 100% 1:1 兼容免费发行版 Rocky Linux 由 CentOS 项目的创始人 Gregory Kurtzer 领导 请访问原文链接:Rocky Linux 9.4 正式版发布 - RHEL 100% 1:1 兼容免费发行版,查看最新版。原创作品,转载请保留出处…

20212313 2023-2024-2 《移动平台开发与实践》第5次作业

20212313 2023-2024-2 《移动平台开发与实践》第5次作业 1.实验内容 设计并开发一个地图应用系统。 该实验需提前申请百度API Key,调用接口实现百度地图的定位功能、地图添加覆盖物和显示文本信息。 2.实验过程 2.1 获取SHA1 (1)打开控制台…

【Python编程】给电脑安装最新的 Python3.12.3

笔者最近更换了新的Win11系统,安装最新的Python版本(3.12.3)尝尝鲜。据说这个版本存在一些漏洞,笔者将后续更新编程过程中的相关问题(如果有)。Python3.12.3的安装过程比较简单,在此进行说明。 …

mac下载安装好软件后提示已损坏

mac下载安装好软件后提示已损坏 解决方法: 首先确保系统安全设置已经改为任何来源。 打开任何来源后,到应用程序目录中尝试运行软件,如果仍提示损坏,请在应用图标上,鼠标右键,在弹出菜单中点打开。 如果…

【Pandas】深入解析`pd.read_pickle()`函数

【Pandas】深入解析pd.read_pickle()函数 🌈 欢迎莅临我的个人主页👈这里是我深耕Python编程、机器学习和自然语言处理(NLP)领域,并乐于分享知识与经验的小天地!🎇 🎓 博主简介&…

WordPress子比主题美化-首页动态的图片展示

WordPress子比主题首页动态的图片展示 WordPress子比主题首页添加动态的图片展示,其他程序也可以用,复制代码到相应位置即可,也可作为指定分类,重点内容等,可以适合各个场景,需要的自取。 图片展示: 教程…

如何搭建个人观测云平台

如何搭建个人观测云平台 安装DataKit什么是DataKit? 仪表板指标管理监控 开通阿里云观测云服务后,在观测云平台页面进行下面的操作。 安装DataKit 什么是DataKit? DataKit 是观测云官方发布的数据采集应用,支持上百种数据的采集…

恢复视频3个攻略:从不同情况下的恢复方法到实践!

随着科技的进步,我们的生活被各种各样的数字内容所包围,其中,视频因其独特的记录性质,承载着许多重要的资料。但不管是自媒体人还是普通人日常生活随手一拍,都会遇到误删视频的情况。为了帮助您找回手机视频&#xff0…

数据挖掘与机器学习——分类算法

目录 机器学习算法最普通分类: 分类算法的定义: 分类算法的应用: 分类器实现分类: 分类器的构建标准: 概率模型: 贝叶斯公式: 朴素贝叶斯算法(朴素贝叶斯分类器)…

【吊打面试官系列】Java高并发篇 - Java 死锁以及如何避免?

大家好,我是锋哥。今天分享关于 【Java 死锁以及如何避免?】面试题,希望对大家有帮助; Java 死锁以及如何避免? Java 中的死锁是一种编程情况,其中两个或多个线程被永久阻塞,Java 死锁情况出现至…

正版软件 | Internet Download Manager 下载管理器

前言 IDM 是一个下载加速器,可将下载速度提高多达 8 倍,恢复、组织和安排下载。 30 天免费试用!https://www.internetdownloadmanager.cc/ 新版本 Internet Download Manager v 6.40:添加了 Windows 11 兼容性。改进了媒体采集…

Stable Diffusion AI绘画:从提示词到模型出图的全景指南

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…

微信公众号关注页获取方式

Demo Location 查找步骤 仔细看下链接验证,排查有特点的参数__biz 分析如何获取__biz 查看某个文章线下零食届「拼多多」席卷,「赵一鸣们」如何高效拓店?,查看源代码 ,查找关键词 替换链接并执行

30V MOS管 60VMOS管 100VMOS管 150VMOS管推荐

MOS管,即金属氧化物半导体场效应管,其工作原理是:在P型半导体与N型半导体之间形成PN结,当加在MOS管栅极上的电压改变时,PN结之间的沟道内载流子的数量会随之改变,沟道电阻也会发生改变,进而改变…

Linux如何设置共享文件夹

打开虚拟机->菜单->虚拟机设置->选项->共享文件夹->总是启用。点击添加按钮->弹出添加向导->点击浏览按钮,从windows中选择一个文件夹,确定即可。

pdf打开方式怎么设置默认?分享这几种设置方法

pdf打开方式怎么设置默认?你是否曾遇到过打开PDF文档时,默认的打开程序并非你所需要的,从而影响了工作效率?别担心,本文将为你详细解读如何设置PDF的默认打开方式,让你的工作更加高效便捷。 首先&#xff0…