如何在屏幕上听键盘颤振?

gre*_*nes 6 flutter

我正在构建一个移动应用程序,我想在键盘出现在屏幕上时(即当输入文本字段成为焦点时)删除小部件。

我尝试使用,RawKeyboardListener但似乎无法正常工作,我的代码如下:

     new Container(
         child: new RawKeyboardListener(focusNode: new FocusNode(),
         onKey: (input) => debugPrint("*****KEY PRESSED"),
         child: new TextField(
         controller: new TextEditingController(),
    )));
Run Code Online (Sandbox Code Playgroud)

Ben*_*rad 9

您可以使用这个简单的检查:

MediaQuery.of(context).viewInsets.bottom == 0
Run Code Online (Sandbox Code Playgroud)

返回 true 时键盘关闭,否则打开。请注意获取整个屏幕的上下文(例如 Scaffold),而不仅仅是来自一个小部件。

这是您将该检查集成到代码中的方式:

Visibility(
  child: Icon(Icons.add),
  visible: MediaQuery.of(context).viewInsets.bottom == 0,
)
Run Code Online (Sandbox Code Playgroud)

  • 我在 Android 和 iOS 设备上测试并成功使用了它。 (2认同)

Hem*_*Raj 7

当文本字段获得焦点时,键盘将自动出现。因此,您可以向焦点节点添加一个监听器来监听焦点变化并隐藏相应的小部件。

例子:

    void _listener(){
        if(_myNode.hasFocus){
          // keyboard appeared 
        }else{
          // keyboard dismissed
        }
    }

    FocusNode _myNode = new FocusNode()..addListener(_listner);

    TextField _myTextField = new TextField(
            focusNode: _mynNode,
            ...
            ...
        );

    new Container(
        child: _myTextField
    );
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,这在键盘关闭时不起作用似乎 TextField 没有失去焦点 (12认同)