events - Flutter:如何防止按键时的默认行为?

标签 events dart event-handling flutter preventdefault

当用户按下音量按钮执行特定操作并阻止默认行为(音量更改)时,我试图拦截。

这是我到目前为止的代码:

RawKeyboard.instance.addListener(_keyboardListener);

void _keyboardListener(RawKeyEvent e) {
  if(e.runtimeType == RawKeyUpEvent) {
    RawKeyEventDataAndroid eA = e.data;
    if(eA.keyCode == 24) { //volume up key
      _goNextPage();
    }
    if(eA.keyCode == 25) { //volume down key
      _goPrevPage();
    }
  }
}

我将如何防止音量变化(并阻止音量 slider 出现在顶部)?

类似的 Javascript 将调用 event.preventDefault()在关键事件上。

这似乎是一件相当微不足道的事情,但我无法在文档中找到任何答案。

谢谢。

最佳答案

我遇到了类似的问题,以及如何分享我如何解决它。
要停止传播,我们必须从焦点节点树中 trueonKey 方法返回 FocusNode。为了实现这一点,我用 FocusScopeFocus 小部件包装了我的应用程序主体,如下所示:

MaterialApp(
      home: Scaffold(
          body: FocusScope(
              autofocus: true,
              child: Focus(
                  autofocus: true,
                  canRequestFocus: true,
                  onKey: (data, event) {
                    if (event.isKeyPressed(LogicalKeyboardKey.audioVolumeUp)) {
                      print("Volume up");
                      return true;
                    }
                    if (event
                        .isKeyPressed(LogicalKeyboardKey.audioVolumeDown)) {
                      print("Volume down");
                      return true;
                    }
                    return false;
                  },
                  child: Text(text: "Hallochen")))))

关于events - Flutter:如何防止按键时的默认行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53473425/

相关文章:

c++ - NodeJS 文件系统观察两次或更多次抛出事件

dart - 创建合适的 Flutter UI

json - _TypeError 被抛出构建 FutureBuilder<dynamic>(脏,状态 : _FutureBuilderState<dynamic> type 'Null' is not a subtype of type 'List<dynamic>'

c# - WPF:当 IsEnabled=false 时获取 MouseEnter 事件

hibernate - 刷新后调用 Hibernate PostInsertEventListener

javascript - jQuery:绑定(bind)事件 - 在 $(document).ready 或 html DOM 事件处理程序中?

Mysql 重复事件

dart - 如何将 Map<String,String> 转换为人类可读的字符串(在 Dart 中)?

javascript - Javascript函数自行调整大小

events - Google Maps API v3 'dragend' 事件在 map 完成滑动之前触发