在 Flutter 中,如何检查是鼠标设备还是触摸设备?

jwa*_*her 8 dart flutter

如何检查设备是触控设备还是鼠标设备?

使用 kIsWeb 是不够的,因为如果在移动设备上使用 web 版本的应用程序 kIsWeb 返回 true,但我需要它返回 false,因为它是一个触摸设备。

检查平台也不起作用,因为如果在 iOS 设备上使用应用程序的网络版本,例如,对于 iOS 平台检查返回 false。

用例 - 我的应用程序有两种不同类型的视频播放器。一种适用于触摸设备(您点击以显示和隐藏控件),一种适用于鼠标设备(当您将鼠标移入播放器时显示控件,并在鼠标移开时隐藏)。

Youtube 也有同样的想法。如果我在 iPhone 上使用 youtube 应用程序或网站,我会获得触摸控制。如果我在 iPad Pro 上使用 youtube 应用程序或网站,我会获得触摸控制。如果我在 Mac 上使用 youtube 网站,我可以获得所有屏幕尺寸(甚至移动屏幕尺寸)的鼠标控件。

所以我想我真的只需要了解网络上的平台。如果不在网络上,我可以获得平台。

Ric*_*ods 4

好问题@jwasher!我遇到了同样的问题 - 基于触摸和滑动的 UI,作为本机移动应用程序非常好,作为移动 Web 浏览器上的单页 Web 应用程序 (SPA) 也很棒,但是当 SPA 是基于鼠标的交互时,这很奇怪且笨重。在桌面网络浏览器中使用。

我确定的解决方案是将敏感小部件包装在 MouseRegion ( https://api.flutter.dev/flutter/widgets/MouseRegion-class.html ) 中以在运行时检测鼠标活动,然后通过使用按钮增强 UI 来做出反应提供以鼠标为中心的方式来触发以前仅链接到触摸触发器的操作。

您可以使用它来“启用鼠标”单个小部件,或者您可以将整个应用程序包装在 MouseRegion 中,在检测到活动时触发状态字段,然后以完全不同的方式为点击用户重建小部件树。

在永远不会连接鼠标的设备(如智能手机)上,此策略可能会产生一些较小的复杂性/CPU 开销,但该解决方案将比构建或配置时间能力确定更灵活。如果用户在平板电脑上启动应用程序,然后将其放在支架上并连接蓝牙鼠标 - 它会做出适当的反应。