您的位置:首页 > 娱乐 > 八卦 > Flutter 实现软鼠标

Flutter 实现软鼠标

2024/10/6 8:35:21 来源:https://blog.csdn.net/u013113678/article/details/139732149  浏览:    关键词: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 Listener(onPointerMove: (event) {_offset.value = event.position;},child: MouseRegion(cursor: SystemMouseCursors.none,hitTestBehavior: HitTestBehavior.opaque,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: IgnorePointer(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显示。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com