在我的Flutter应用中,我有一个文本框,我希望能够通过点击非交互组件来将焦点从中移除。这不是Flutter中文本框的默认行为,因此我需要找到一种手动实现的方法。我已经按照https://flutterigniter.com/dismiss-keyboard-form-lose-focus/和其他网页上的步骤进行了一些操作,其中包括在根节点上使用一个具有onTap属性的GestureDetector,代码如下:
问题在于当我选择文本字段并单击其他地方(此时焦点似乎消失),打开时间选择器,然后关闭该时间选择器时,文本字段会重新获得焦点。如果我通过点击键盘上的“完成”按钮取消文本字段的焦点,那么打开/关闭时间选择器就不会重新聚焦文本字段,因此我知道这必须是因为我取消焦点的方式有问题。有什么正确的方法可以取消焦点,使焦点不会再次回来呢?
onTap: () {
FocusScopeNode cf = FocusScope.of(context);
if (!cf.hasPrimaryFocus && cf.focusedChild != null) {
cf.focusedChild.unfocus();
cf.unfocus();
}
}
问题在于当我选择文本字段并单击其他地方(此时焦点似乎消失),打开时间选择器,然后关闭该时间选择器时,文本字段会重新获得焦点。如果我通过点击键盘上的“完成”按钮取消文本字段的焦点,那么打开/关闭时间选择器就不会重新聚焦文本字段,因此我知道这必须是因为我取消焦点的方式有问题。有什么正确的方法可以取消焦点,使焦点不会再次回来呢?