Flutter手势组件(4):MouseRegion

news/2024/11/20 13:55:10/文章来源:https://www.cnblogs.com/linuxAndMcu/p/18556710

一、MouseRegion介绍

在我们进行 h5 开发的时候,我们都知道css有一个hover来改变元素的样式,那么我们在Flutter中也可以通过MouseRegion是监听区域内鼠标的进入和退出以及移动轨迹。

二、什么情况下使用MouseRegion?

MouseRegion常用于FlutterWeb开发或者桌面程序中,当我们鼠标需要对某个组件进入或者退出时需要增加一些特定的功能,那我们就需要用到MouseRegion

三、MouseRegion的构造函数

const MouseRegion({Key? key,this.onEnter,this.onExit,this.onHover,this.cursor = MouseCursor.defer,this.opaque = true,this.child,
}) : assert(cursor != null),
assert(opaque != null),
super(key: key);

四、MouseRegion的属性和说明

字段 属性 描述
onEnter PointerEnterEventListener 鼠标进入区域时的回调
onExit PointerHoverEventListener 鼠标退出区域时的回调
onHover PointerExitEventListener 鼠标在区域内移动时的回调
cursor MouseCursor 鼠标悬停区域时的光标样式
opaque bool 是否阻止检测鼠标
child Widget 子组件

五、MouseRegion的基本使用

我们通过MouseRegion来包裹了一个子组件Container,当鼠标进行时就会走onEnter的回调并改变其颜色为绿色,移动鼠标时就会走onHover的回调,鼠标退出Container区域时进入onExit的回调并改变其颜色为橙色。代码如下

// ignore_for_file: prefer_const_constructors
import 'package:flutter/material.dart';void main() => runApp(const MyApp());class MyApp extends StatelessWidget {const MyApp({super.key});@overrideWidget build(BuildContext context) {return MaterialApp(home: MouseRegionExample(),);}
}class MouseRegionExample extends StatefulWidget {const MouseRegionExample({super.key});   @overrideState<MouseRegionExample> createState() => _MouseRegionExampleState();
}class _MouseRegionExampleState extends State<MouseRegionExample> {Color _color = Colors.orange;@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("MouseRegion"),),body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.center,children: [MouseRegion(onEnter: (event) {debugPrint("onEnter---$event");setState(() {_color = Colors.green;});},onExit: (event) {debugPrint("onExit---$event");setState(() {_color = Colors.orange;});},onHover: (event) {// print("onHover---$event");},// cursor: MouseCursor.uncontrolled,cursor: SystemMouseCursors.click,opaque: false,child: Container(width: 100,height: 100,color: _color,),),],)),);}
}

效果图如下所示:

Flutter_Event_A.gif


六、其它用法

阻止鼠标事件传递

MouseRegion 通过 opaque 参数可以阻止鼠标事件传递到子组件。

MouseRegion(opaque: true,// ...child: Container(// ...),
)

opaque 设置为 true 时,鼠标事件将被 MouseRegion 消耗,不会继续传递到子组件。


检测鼠标点击

MouseRegion 也可以检测鼠标点击事件,通过 onExit 回调函数可以判断鼠标是否点击后离开区域。

onExit: (PointerExitEvent event) {if (event.knewButtonState == ButtonState.pressed) {print('Mouse clicked outside the region');}
},

自定义鼠标光标

MouseRegion 允许你通过 cursor 参数自定义鼠标悬停时的光标形状。

import 'package:flutter/services.dart'; // 包含SystemMouseCursorMouseRegion(cursor: SystemMouseCursors.click,// ...
)

七、总结

MouseRegion在专门针对于Web以及桌面应用程序监听鼠标在某个区域内的事件,包括鼠标的进入和退出以及移动轨迹,在平时的开发中使用相对会较少,如果在以后进行Flutter Web开发时MouseRegion我们就会经常用到。


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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flutter手势组件(3):GestureDetector

一、GestureDetector介绍 在前面的文章中我们介绍了Listener,而GestureDetector是对Listener的封装,提供非常多的手势,包括单击、双击、拖动、混合手势等。 二、什么情况下使用GestureDetector? 当我们需要对文字需要增加点击事件时,或者需要对组件进行拖动、缩放等那我们就…

11.18 学习

11.18 学习 1.sqlselect m.user_id,round(ifnull(cfnum/p,0),2) confimation_rate from (select a.user_id,ifnull(num,0) p from Signups a left join (select user_id,count(*) num from Confirmations group by user_id)b on a.user_id=b.user_id) m left join(select user_…

2024-11-20:交替子数组计数。用go语言,给定一个二进制数组 nums, 如果一个子数组中的相邻元素的值都不相同,我们称这个子数组为交替子数组。 请返回数组 nums 中交替子数组的总数。 输

2024-11-20:交替子数组计数。用go语言,给定一个二进制数组 nums, 如果一个子数组中的相邻元素的值都不相同,我们称这个子数组为交替子数组。 请返回数组 nums 中交替子数组的总数。 输入: nums = [0,1,1,1]。 输出: 5。 解释: 以下子数组是交替子数组:[0] 、[1] 、[1] …

登录对话框

1.粉红(1)显示   (2)格式/**该页面为粉红色皮肤 *//*背景*/ #frame_background{ border-image:url(:/res/pic/background-1.png); }/*登录背景*/ #frame_login{background-color:#ffffff}/*右侧图片*/ #frame_pic{background-image:url(:/res/pic/1.png);} /*账户和密码框…

Windows注册表增加右键多级菜单

前言全局说明一、说明 环境: Windows 11 家庭版 23H2 22631.3737Windows 7 旗舰版二、注册表说明 2.1 项说明 HKEY_CLASSES_ROOT*:系统所有文件,右键系统任一文件都会添加右键菜单 HKEY_CLASSES_ROOT\.txt:在.txt文件,添加右键菜单 HKEY_CLASSES_ROOT\AllFilesystemObjects…

关于使用Pycharm新建flask项目 from flask 红色波浪线解决办法

首先保证 flask已经安装 pip install flask如果依旧报红,依次打开:设置->项目:->项目结构点击 添加内容根 选择当前项目的.venv/Lib/site-packages最后应用保存

Day34--方法的重写

Day34--方法的重写 override 重写 重写是方法的重写,和属性无关 示例: 创建下面三个java文件,并在A.java B.java里面创建方法,Application里面初始化A并引用test方法 ​ A类是B类的子类 package com.liu.oop.demo05;public class A extends B{public static void test…

分享三个选股思路: 元宝底、多维共振、短线金叉

分享三个选股思路: 元宝底、多维共振、短线金叉 作者: 深海游鱼 QQ:396068801 日期:2024年11月 1.元宝底:三条短线快速形成金叉时,是短线追涨买点。 2. 多维共振: 最价金叉+Macd水上金叉,也是短线买点,如果能回踩接人更好。 3. 短线金叉: 三条短期均线聚拢,首日形…

(1)环境准备

前言 暑假趁着打折买的7020,一直到现在(2024年11月20日12:56:06)才打开,然后今天心血来潮准备那驱动啥的都捯饬一下,顺便这几天再看一看有些操作,免得后面用的时候才临时去弄 设备连接 如下图,很方便,直接一根type-c线就搞定了,因为这玩意的下载器直接集成在开发板上了…

SUMO文档阅读——PlainXML

Tutorials https://sumo.dlr.de/docs/Tutorials/index.html net.xml (道路设置) 和 route.xml (车类型设置 + 车流量设置) + .sumocfg (综合前两个xml文件) 十字路口的例子 https://sumo.dlr.de/docs/Networks/PlainXML.html Tools https://sumo.dlr.de/docs/Tools/#tools_by_…

大学减负小技巧

一切仅供学习研究参考。 方法有很多,这里只提供本人认为最方便的手段。 一.脚本刷网课 以Edge浏览器,超星学习通为例 1. 下载脚本管理器,这里使用篡改猴 (Tampermonkey)第二个,下载安装,并固定到工具栏 2.下载合适的脚本,这里推荐这个extension://iikmkjmpaadaobahmlepel…

国产数据库oceanBbase,达梦,金仓与mysql数据库的性能对比 一、比对方法和结果

最近调研了三款国产化数据库与mysql做对比,调研主要性能指标是大数据写入速度、大数据读取速度以及是否支持分表。 一、测试结果 测试结果与预期的差别很大 1、先说oceanBase社区版这款数据库官网上描述性能非常好,感觉可以秒杀mysql,但实际测试结果单节点的情况下,和…