检测点击 android 后退按钮以在 flutter 中关闭键盘
Detect tapping the android back button to close the keyboard in flutter
我正在寻找一种可能性来检测用户何时点击底部的 android 后退按钮以关闭键盘。
问题如下:如果用户点击文本字段,它会获得焦点并出现键盘,这里一切都很好。我将文本字段放在 GestureDetector 中,因此如果用户点击文本字段外的某处,则会调用 unfocus() 。但是在 android 上还有另一种关闭键盘的方法:使用底部智能手机的后退按钮。
有什么方法可以检测用户在键盘打开时点击它的时间吗?据我了解,WillPopScope仅在后退按钮指向左侧时才起作用,但是当键盘打开时,后退按钮指向底部并且它有另一个用途。
keyboard_visibility 包对我不起作用。向 KeyboardVisibilityNotification 添加侦听器时,onHide 和 onChanged 方法没有触发。
@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 在按下事件时关闭键盘
使用 keyboard_visibility 包:https://pub.dev/packages/keyboard_visibility。
onHide 回调由于某种原因没有触发,因此您必须改用 onChange 并检查可见性是否为 false。
由于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();
}
请参阅 package 了解替代实施。
我正在寻找一种可能性来检测用户何时点击底部的 android 后退按钮以关闭键盘。 问题如下:如果用户点击文本字段,它会获得焦点并出现键盘,这里一切都很好。我将文本字段放在 GestureDetector 中,因此如果用户点击文本字段外的某处,则会调用 unfocus() 。但是在 android 上还有另一种关闭键盘的方法:使用底部智能手机的后退按钮。 有什么方法可以检测用户在键盘打开时点击它的时间吗?据我了解,WillPopScope仅在后退按钮指向左侧时才起作用,但是当键盘打开时,后退按钮指向底部并且它有另一个用途。 keyboard_visibility 包对我不起作用。向 KeyboardVisibilityNotification 添加侦听器时,onHide 和 onChanged 方法没有触发。
@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 在按下事件时关闭键盘
使用 keyboard_visibility 包:https://pub.dev/packages/keyboard_visibility。
onHide 回调由于某种原因没有触发,因此您必须改用 onChange 并检查可见性是否为 false。
由于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();
}
请参阅 package 了解替代实施。