android - 检测点击android后退按钮以关闭键盘
问题描述
我正在寻找一种可能性来检测用户何时点击底部的 android 后退按钮以关闭键盘。问题如下:如果用户点击一个文本字段,它会获得焦点并出现键盘,这里一切都很好。我将文本字段放在 GestureDetector 中,因此如果用户点击文本字段之外的某个位置,则会调用 unfocus()。但在 android 上还有另一种关闭键盘的方法:使用底部智能手机的后退按钮。有没有办法检测用户在键盘打开时点击它的时间?据我了解,WillPopScope 仅在后退按钮指向左侧时有效,但当键盘打开时,后退按钮指向底部,它还有另一个用途。keyboard_visibility 包对我不起作用。
解决方案
由于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();
}
有关替代实现,请参阅包。
推荐阅读
- python - 如何在 Python 中重用一个大的、加载成本高的字典?
- python - Djagno 3.0 with Python 3.6.12 1054 遵循 Django 3.0 教程的错误
- mysql - 在 SQLALchemy 中使用 load_only 或 with_entities 的好处有多大?
- java - XStream:无容器节点的 NamedMapConverter 和 HashMap
- angular - 使用路由器链接时保留参数
- reactjs - Formik 错误:TypeError:无法读取未定义的属性“值”
- python - 多个范围列表的交集和补集
- sql - SQL 错误 (245):将 nvarchar 值“50%”转换为数据类型 int 时转换失败
- typescript - 返回实现接口的类的函数:缺少属性
- javascript - 为什么 React 渲染一个组件,即使我没有传递任何东西给它?