android - 如何在 Flutter 中完全取消对 TextField 的关注,而无需稍后返回焦点
问题描述
在我的颤振应用程序中,我有一个文本字段,我希望能够通过点击一个不可交互的组件来移除焦点。这不是 Flutter 中文本字段的默认行为,因此我需要找到一种手动执行此操作的方法。通过遵循https://flutterigniter.com/dismiss-keyboard-form-lose-focus/和其他各种页面上的步骤,我已经让它有点工作了,其中涉及根部的 GestureDetector 和一个看起来像这样的 onTap :
onTap: () {
FocusScopeNode cf = FocusScope.of(context);
if (!cf.hasPrimaryFocus && cf.focusedChild != null) {
cf.focusedChild.unfocus();
cf.unfocus();
}
}
问题是当我选择文本字段时,单击其他位置(此时焦点似乎消失),打开时间选择器,然后关闭该时间选择器,文本字段再次获得焦点。如果我通过单击键盘上的“完成”按钮来取消对文本字段的关注,那么打开/关闭时间选择器不会重新关注文本字段,所以我知道这一定是我取消关注的方式有问题。什么是散焦的正确方法,所以焦点不会像那样回来?
解决方案
我想通了,看起来我需要onTap: () => FocusManager.instance.primaryFocus.unfocus()
在根的 GestureDetector 中使用。我很确定这是解决这个特定问题的最佳方法,但我不确定它是否会引起副作用。
推荐阅读
- .net - .NET Framework 和 .NET Standard 依赖问题
- java - 如何禁用特定端点的身份验证?
- javascript - 无法使用 javascript 提交表单
- php - Laravel - 与模型观察者就一对多关系发送电子邮件
- algorithm - 随机队列实现 - 随机性的想法
- html - Vaadin java 类将无法启动
- python-3.x - Pyautogui 图像识别无论我做什么都返回 None
- node.js - typeorm createConnection 即使在带有 PG 的 MacOS 上使用 Await 也会返回 Pending
- c - CS50 caesar part 1. return 1 在下面的代码中做了什么?
- python - pandas 中值索引的输出,返回一个布尔数组