我正在构建移动应用程序,我想在键盘出现在屏幕上时移除小部件,即当输入文本字段处于焦点时。
我尝试使用RawKeyboardListener
,但这似乎不起作用,我的代码如下:
new Container(
child: new RawKeyboardListener(focusNode: new FocusNode(),
onKey: (input) => debugPrint("*****KEY PRESSED"),
child: new TextField(
controller: new TextEditingController(),
)));
答案 0 :(得分:3)
您可以使用以下简单检查:
MediaQuery.of(context).viewInsets.bottom == 0
当键盘返回true时,它将关闭键盘,否则打开。 请注意,不仅要从一个小部件获取整个屏幕的上下文(例如,脚手架)。
这是将检查内容集成到代码中的方式:
Visibility(
child: Icon(Icons.add),
visible: MediaQuery.of(context).viewInsets.bottom == 0,
)
答案 1 :(得分:2)
当文本字段聚焦时,键盘将自动出现。因此,您可以向focusnode添加一个列表器来监听焦点更改并隐藏相应的小部件。
示例:
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
);
答案 2 :(得分:0)
每当用户按下或释放键盘上的键时,都会调用回调的小部件。
RawKeyboardListener对于侦听原始键事件和表示为键的硬件按钮很有用。通常用于游戏和其他使用键盘输入文字以外的目的的应用。
对于文本输入,请考虑使用EditableText,该文本与屏幕键盘和输入法编辑器(IME)集成。
const RawKeyboardListener({
Key key,
@required FocusNode focusNode,
@required ValueChanged<RawKeyEvent> onKey,
@required Widget child
})
创建一个接收原始键盘事件的小部件。
对于文本输入,请考虑使用EditableText,该文本与屏幕键盘和输入法编辑器(IME)集成。
实施
const RawKeyboardListener({
Key key,
@required this.focusNode,
@required this.onKey,
@required this.child,
}) : assert(focusNode != null),
assert(child != null),
super(key: key);
答案 3 :(得分:0)
您可以在以下位置使用此库keyboard_visibility:^ 0.5.6: https://pub.dev/packages/keyboard_visibility
要执行代码,请将其插入initState()
KeyboardVisibilityNotification.addNewListener(
onChange: (bool visible) {
print(visible);
this.setState(() {
keyboardIsOpen = visible;
});
},
);
无论何时打开或关闭键盘,库都会调用可见性为boolean的onChange方法。
答案 4 :(得分:0)
我使用了keyboard_visibility
包
然后,我用TextField
包裹了KeyboardListener
,实现如下:
class KeyboardListener extends StatefulWidget {
final Widget child;
final void Function(bool) onChange;
KeyboardListener({@required this.child, @required this.onChange});
@override
_KeyboardListenerState createState() => _KeyboardListenerState();
}
class _KeyboardListenerState extends State<KeyboardListener> {
int _sId;
KeyboardVisibilityNotification _kvn;
@override
void initState() {
super.initState();
_kvn = KeyboardVisibilityNotification();
_sId = _kvn.addNewListener(
onChange: widget.onChange,
);
}
@override
Widget build(BuildContext context) {
return widget.child;
}
@override
void dispose() {
_kvn.removeListener(_sId);
super.dispose();
}
}