检测敲击android后退按钮以关闭颤动中的键盘



我正在寻找一种可能性来检测用户何时点击底部的android后退按钮以关闭键盘。问题如下:如果用户点击一个文本字段,它就会获得焦点并出现键盘,那么这里一切都很好。我把文本字段放在手势检测器中,所以如果用户点击文本字段之外的某个地方,就会调用unfocus((。但在安卓系统上,还有另一种关闭键盘的方法:使用底部智能手机上的后退按钮。有什么方法可以检测用户在键盘打开时敲击它吗?据我所知,WillPopScope只在后退按钮指向左侧时工作,但当键盘打开时,后退按钮指向底部,它有另一个用途。keyboard_visibility包对我不起作用。在向KeyboardVisibilityNotification添加侦听器时,方法onHide和onChanged没有激发。

由于keyboard_visibility包不再更新,您可以使用这个新包:Flutter keyboard visibility。它使用空安全,并且正在获取更新。

这是我的方法,使用FocusManager而不是FocusScope。

late final KeyboardVisibilityController _keyboardVisibilityController;
late StreamSubscription<bool> keyboardSubscription;
@override
void initState() {
super.initState();
_keyboardVisibilityController = KeyboardVisibilityController();
keyboardSubscription = _keyboardVisibilityController.onChange.listen((isVisible) {
if (!isVisible) FocusManager.instance.primaryFocus?.unfocus();
});
}
@override
void dispose() {
keyboardSubscription.cancel();
super.dispose();
}

有关其他实现,请参阅软件包。

使用keyboard_visibility包:https://pub.dev/packages/keyboard_visibility.

由于某些原因,onHide回调没有启动,因此必须使用onChange并检查可见性是否为false。

@override
Widget build(BuildContext context) {
return WillPopScope(
child: Scaffold(.....),
onWillPop: () async {
var currentFocus = FocusScope.of(context);
if (!currentFocus.hasPrimaryFocus && currentFocus.focusedChild != null) {
currentFocus.focusedChild.unfocus();
return false;
}else{
return true;
}
},
);
}

使用WillPopScope关闭键盘背面按压事件

最新更新