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

Flutter 实现软鼠标

文章目录

  • 前言
  • 一、如何实现?
    • 1、记录鼠标偏移
    • 2、MouseRegion获取偏移
    • 3、Transform移动图标
  • 二、完整代码
  • 三、使用示例
  • 总结


前言

flutter在嵌入式系统中运行时,有可能遇到drm鼠标无法使用的情况,但鼠标事件却可以正常接收,此时如果有软鼠标,就可以一定程度解决问题。本文提供了一个软鼠标的简单实现,主要适用于无法使用硬鼠标的场景


一、如何实现?

1、记录鼠标偏移

final _offset = ValueNotifier<Offset>(Offset.zero);

2、MouseRegion获取偏移

MouseRegion(onHover: (event) {_offset.value = event.position;},)

3、Transform移动图标

ValueListenableBuilder(valueListenable: _offset,builder: (context, value, child) => Transform.translate(offset: value,))

二、完整代码

import 'package:flutter/material.dart';class SoftMouse extends StatelessWidget {final _offset = ValueNotifier<Offset>(Offset.zero);final Widget child;final Widget? cursor;//自定义鼠标样式SoftMouse({super.key, required this.child, this.cursor});Widget build(BuildContext context) {return MouseRegion(cursor: SystemMouseCursors.none,onHover: (event) {_offset.value = event.position;},child: Stack(children: [child,ValueListenableBuilder(valueListenable: _offset,builder: (context, value, child) => Transform.translate(offset: value,child: Align(alignment: Alignment.topLeft,child: cursor ?? const Icon(Icons.mouse),),),),],));}
}

三、使用示例

class MyApp extends StatelessWidget {const MyApp({super.key});Widget build(BuildContext context) {return MaterialApp(home: Scaffold(body: Center(child: SoftMouse(child: const SizedBox(),),),),);}
}

效果预览

在这里插入图片描述


总结

以上就是今天要讲的内容,本文实现的软鼠标还是比较简单的,当然软鼠标对性能还是有一定的影响的,比如在linux中,每次移动都会触发交换缓存进行drm显示。

相关文章:

  • 寻找重复数 - LeetCode 热题 100
  • QCombox绑定QMap
  • Map-JAVA面试常问
  • exzxml C语言XML解析库使用记录
  • selenium框架学习
  • Aigtek电压放大器的主要作用是什么
  • 华为手机数据恢复,2个技巧介绍,误删文件后的紧急处理
  • Python界面编辑器Tkinter布局助手 使用体验
  • 目标跟踪——KCF源码用python实现
  • 本地无法连接linux上的MariaDB数据库
  • 好用的便签是什么 电脑桌面上好用的便签
  • 【51单片机基础教程】点亮led
  • go编程中接口(interface)用法
  • springboot基于Web的社区医院管理服务系统 LW+ PPT+源码+讲解
  • 深入理解和实现Windows进程间通信(共享内存)
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • dva中组件的懒加载
  • ES6之路之模块详解
  • js中的正则表达式入门
  • XML已死 ?
  • 高性能JavaScript阅读简记(三)
  • 前端设计模式
  • 如何学习JavaEE,项目又该如何做?
  • 山寨一个 Promise
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 我的面试准备过程--容器(更新中)
  • 写代码的正确姿势
  • 因为阿里,他们成了“杭漂”
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • # 职场生活之道:善于团结
  • $ git push -u origin master 推送到远程库出错
  • (k8s)kubernetes集群基于Containerd部署
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (分布式缓存)Redis哨兵
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)socket Aio demo
  • .dwp和.webpart的区别
  • .NET : 在VS2008中计算代码度量值
  • .NET 4.0中的泛型协变和反变
  • .net core 的缓存方案
  • .net MVC中使用angularJs刷新页面数据列表
  • .NET 反射的使用
  • .Net 路由处理厉害了
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .net开发引用程序集提示没有强名称的解决办法
  • ::
  • @RequestMapping 和 @GetMapping等子注解的区别及其用法
  • @Transaction注解失效的几种场景(附有示例代码)