在我的颤音应用程序中,我有一个文本字段,我希望能够通过点击一个不可交互的组件来移除焦点。这不是textfields在颤振中的默认行为,所以我需要找到一种手动操作的方法。通过遵循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();
}
}
问题是,当我选择文本字段时,单击其他地方(焦点似乎在此时消失),打开一个时间选择器,关闭该时间选择器,文本字段将再次聚焦。如果我通过单击键盘上的“完成”按钮而使文本字段不对焦,那么打开/关闭时间选择器将不会重新调整文本字段的焦点,因此我知道这肯定是我对其不对焦的一个问题。什么是正确的方法,使它不聚焦,这样就不会回来像那样?
发布于 2020-09-28 19:54:04
我想明白了,看起来我需要在根目录下的onTap: () => FocusManager.instance.primaryFocus.unfocus()
中使用GestureDetector。我很确定这是解决这个问题的最好方法,但我不确定它是否会产生副作用。
发布于 2020-09-28 18:54:35
将整个屏幕包装到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');
}
发布于 2022-01-04 11:19:21
不需要调用unfocus
方法对我起作用的是,我告诉TextField本身不要自己请求关注。在文本字段中,我添加了:
focusNode: FocusNode(canRequestFocus: false),
我相信这是正确的处理方法。
https://stackoverflow.com/questions/64107922
复制相似问题