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

jos*_*eph 5 events event-handling preventdefault dart flutter

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

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

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();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我将如何防止音量改变(并阻止音量滑块出现在顶部)?

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

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

谢谢。

Ser*_*kov 4

我也遇到过类似的问题,分享一下我是如何解决的。

要停止传播,我们必须true从焦点节点树中onKey的 a 方法返回。FocusNode为了实现这一点,我用这样的小部件包装了我的应用程序FocusScope主体:Focus

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")))))
Run Code Online (Sandbox Code Playgroud)