我们怎么知道屏幕在 Dart 中是可触摸的?

How can we know that the screen in touchable in Dart?

要开发响应式应用程序,我们需要知道用户是使用他的手指还是鼠标来调整应用程序的行为。例如,如果屏幕是可触摸的,按钮会更大...

我们可以通过监听Window.onTouch事件和Window.onMouse事件来猜测屏幕是否可触摸。

但我想在应用程序加载时知道它:在用户进行任何交互之前。

我该怎么做?

您可以使用 dart:js 并使用此答案中显示的方法

将此添加到您的 index.html

<script type="application/javascript">
  function hasTouchSupport() {
    return 'ontouchstart' in document.documentElement;
  }
</script>

然后像

这样从 Dart 调用它
import 'dart:html';
import 'dart:js' as js;

bool _hasTouchSupport;
bool get hasTouchSupport {
  if(_hasTouchSupport == null) {
    _hasTouchSupport = js.context.callMethod('hasTouchSupport');
  }
  return _hasTouchSupport;
}

void main() {
  print(hasTouchSupport);
}

false 在 Dartium/Chrome 在 Linux
true 我的 Android phone

根据 What's the best way to detect a 'touch screen' device using JavaScript? 的说法,拥有适用于所有浏览器的东西并不容易。

如果您使用 Modernizr,您可以使用:

 import 'dart:js' as js;

 bool get isTouchDevice => js.context['Modernizr']['touch'];