首页 > 解决方案 > 如何在 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();
  }
}

问题是当我选择文本字段时,单击其他位置(此时焦点似乎消失),打开时间选择器,然后关闭该时间选择器,文本字段再次获得焦点。如果我通过单击键盘上的“完成”按钮来取消对文本字段的关注,那么打开/关闭时间选择器不会重新关注文本字段,所以我知道这一定是我取消关注的方式有问题。什么是散焦的正确方法,所以焦点不会像那样回来?

标签: androidflutterfocustextfield

解决方案


我想通了,看起来我需要onTap: () => FocusManager.instance.primaryFocus.unfocus()在根的 GestureDetector 中使用。我很确定这是解决这个特定问题的最佳方法,但我不确定它是否会引起副作用。


推荐阅读