如何在没有焦点的情况下完全取消焦点 TextField 稍后回来
How to fully unfocus TextField in flutter without focus coming back later
在我的 flutter 应用程序中,我有一个文本字段,我希望能够通过点击一个不可交互的组件来移除焦点。这不是 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();
}
}
问题是,当我 select 文本字段单击其他地方(此时焦点似乎消失),打开时间选择器,然后关闭该时间选择器时,文本字段再次获得焦点。如果我通过单击键盘上的“完成”按钮取消对文本字段的关注,那么 opening/closing 时间选择器将不会重新关注文本字段,所以我知道这一定是我取消关注的方式有问题.什么是正确的分散注意力的方法,这样焦点就不会像那样回来了?
将整个屏幕包裹到 GestureDetector
有两种方法可以关闭键盘\
FocusScope.of(context).requestFocus(FocusNode());
import 'package:flutter/services.dart';
SystemChannels.textInput.invokeMethod('TextInput.hide');
所以请尝试用这个编码
import 'package:flutter/services.dart';
onTap(){
SystemChannels.textInput.invokeMethod('TextInput.hide');
}
我明白了,看来我需要在根的 GestureDetector 中使用 onTap: () => FocusManager.instance.primaryFocus.unfocus()
。我很确定这是解决这个特定问题的最佳方法,但我不确定它是否会导致副作用。
无需调用 unfocus
方法对我有用的是,我告诉 TextField 本身不要自行请求焦点。
在文本字段中,我添加了:
focusNode: FocusNode(canRequestFocus: false),
我认为这是处理该问题的正确方法。
在我的 flutter 应用程序中,我有一个文本字段,我希望能够通过点击一个不可交互的组件来移除焦点。这不是 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();
}
}
问题是,当我 select 文本字段单击其他地方(此时焦点似乎消失),打开时间选择器,然后关闭该时间选择器时,文本字段再次获得焦点。如果我通过单击键盘上的“完成”按钮取消对文本字段的关注,那么 opening/closing 时间选择器将不会重新关注文本字段,所以我知道这一定是我取消关注的方式有问题.什么是正确的分散注意力的方法,这样焦点就不会像那样回来了?
将整个屏幕包裹到 GestureDetector
有两种方法可以关闭键盘\
FocusScope.of(context).requestFocus(FocusNode());
import 'package:flutter/services.dart';
SystemChannels.textInput.invokeMethod('TextInput.hide');
所以请尝试用这个编码
import 'package:flutter/services.dart';
onTap(){
SystemChannels.textInput.invokeMethod('TextInput.hide');
}
我明白了,看来我需要在根的 GestureDetector 中使用 onTap: () => FocusManager.instance.primaryFocus.unfocus()
。我很确定这是解决这个特定问题的最佳方法,但我不确定它是否会导致副作用。
无需调用 unfocus
方法对我有用的是,我告诉 TextField 本身不要自行请求焦点。
在文本字段中,我添加了:
focusNode: FocusNode(canRequestFocus: false),
我认为这是处理该问题的正确方法。