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

第二十四回:如何屏蔽事件

文章目录

  • 概念介绍
  • 使用方法
    • 限定事件范围
    • 限定组件
  • 示例代码
  • 经验总结

我们在上一章回中介绍了事件处理相关的内容,,本章回中将介绍 如何屏蔽事件相关的知识.闲话休提,让我们一起Talk Flutter吧。

概念介绍

我们在实际项目中不但需要处理各种点击事件,而且需要屏蔽部分点击事件,比如多个组件在一起时就会发生事件冲突。因此我们需要屏蔽部分组件的点击事件。本章回中将介绍如何屏蔽事件。此外,这里说的事件表示PointerEvent类及其子类所表示的事件。

使用方法

限定事件范围

我们可以把Listener组件放到一个容器中(Container类组件),然后通过容器来限制范围,这样只有指定范围内的事件才能被响应。这里说的限制范围本质上就限制容器的长度和宽度,对容器的长度和宽度进进限定后就能确定容器的大小,相当于在屏幕上划出了一块等于容器大小的区域,位于在该区域内的组件才能响应事件,位于该区域外的组件则不能响应事件。

如何判断组件是否位于区域内?看child属性对应的组件:Container的child属性对应Listener组件,Listener组件的child属性对应的组件就是位于区域内的组件。反之就是位于区域外的组件。

限定组件

我们还可以使用专门的组件来屏蔽事件,这个组件是IgnorePointer,该组件有一个child属性,与child属性对应的组件不会响应任何事件。如果我们不想让某个组件响应事件,那么可以把它赋值给IgnorePointer组件对应的child属性。

示例代码

return Scaffold(
  appBar: AppBar(
    title: const Text("Example of PointerEvent"),
    backgroundColor: Colors.purpleAccent,
  ),
  body: Column(
    mainAxisAlignment: MainAxisAlignment.spaceEvenly,
    crossAxisAlignment: CrossAxisAlignment.center,
    children: [
      Container(
        color: Colors.blue,
        alignment: Alignment.center,
        width: 200,
        height: 200,
        child: Listener(
            onPointerDown: _eventDown,
            onPointerMove: _eventMove,
            onPointerUp: _eventUp,
            child: const Text(
              "Event Listener inside",
              style: TextStyle(
                color: Colors.black87,
                fontSize: 16,
                backgroundColor: Colors.white,
              ),
            )),
      ),
      Listener(
        //Listener可以当作容器Widget包含其它Widget使用,也可以当作独立widget使用
        onPointerCancel: _eventCancle,
        onPointerDown: _eventDown,
        onPointerUp: _eventUp,
        onPointerMove: _eventMove,
        child: Container(
          color: Colors.orange,
          alignment: Alignment.center,
          constraints: const BoxConstraints(
            minWidth: 200,
            minHeight: 100,
          ),
          child: const Text(
            "Event Listener Outside",
            style: TextStyle(
              color: Colors.black87,
              backgroundColor: Colors.white,
            ),
          ),
        ),
      ),
      IgnorePointer(
        child: Container(
          color: Colors.lime,
          alignment: Alignment.center,
          width: 300,
          height: 100,
          child: Listener(
            onPointerDown: _eventDown,
            child: const Text(
              "Ignore Event Listener",
              style: TextStyle(
                color: Colors.black87,
                backgroundColor: Colors.white,
              ),
            ),
          ),
        ),
      ),
    ],
  ),
); 

上面的代码中,在页面中放了三列:

  • 第一列中在容器内嵌套了一个Listener,并且把Text组件赋值给了Listener组件,我们称其为"Event Listener inside".该内容中只有点击Text组件时才会响应事件,相当于屏蔽了Text组件外的事件。
  • 第二列中在Listener内嵌套了一个容器组件,并且把Text组件赋值给了容器的child属性,我们称其为"Event Listener outside",该内容中只要点击容器内的任何位置都可以响应事件,相当于屏蔽了容器外的事件。
  • 第三列中在IgnorePointer组件内嵌套了一个容器组件,并且Text赋值给容器的child属性,我们称其为"Ignore Event Listener",该内容中不论点击Text外还是Text内都不会响应事件。

程序中为了方便观察,我们给容器和Text添加了背景色,建议大家动手试试,通过程序打印的日志来观察是否响应了事件。

经验总结

我们介绍了两种屏蔽事件的方法,大家可以依据项目的需要选择不同的方法。在实际项目中我们要尽可能小地缩小事件的响应范围,这样可以避免不必要的事件冲突。因此常用的做法是在容器类组件中嵌套一个Listener组件。当然这只是个人经验,大家可以在评论区分享和交流自己的项目经验。

看官们,关于"如何屏蔽事件"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!


http://www.kler.cn/news/17405.html

相关文章:

  • SpringMVC(后)SSM整合
  • [创新工具和方法论]-01- DOE课程基础知识
  • K8s 安全是云安全的未来
  • AI仿写软件-仿写文章生成器
  • 计算机组成原理4.2.3提高存储器访问速度的措施
  • 送了老弟一台 Linux 服务器,它又懵了!
  • Ae:橡皮擦工具
  • Redis缓存穿透和雪崩
  • 3 文件和目录
  • 归纳截图小结
  • innodb_flush_log_at_trx_commit 和 sync_binlog 参数解析
  • 数字中国建设峰会|大模型带来产业智能化新机遇
  • 【Linux0.11代码分析】03 之 setup.s 启动流程
  • C++——类和对象(3)
  • 初识 OPC
  • 05_Uboot源码目录分析
  • Java 版 spring cloud 工程系统管理 工程项目管理系统源码 工程项目各模块及其功能点清单
  • 2.压力测试+优化(Jmeter)
  • ChatGPT提示词工程(四):Inferring推断
  • MySQL基础
  • vim编辑器
  • Build生成器模式
  • (二)【平衡小车制作】电机驱动(超详解)
  • 内存越界是否一定会导致程序崩溃吗?详解内存越界
  • CUDA下载,以及下载GPU版本的pytorch
  • JAVA基于Springboot框架的停车场管理系统开发实践和实现【附源码】
  • DP动态规划
  • 1.rabbitMQ介绍
  • JavaScript闭包的基本原理和应用场景
  • 人的全面发展评价指标体系—基于相关-主成分分析构建