Lio*_*oft 9 android focus textfield 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();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我选择文本字段时,单击其他位置(此时焦点似乎消失),打开时间选择器,然后关闭该时间选择器,文本字段再次聚焦。如果我通过单击键盘上的“完成”按钮来取消文本字段的焦点,那么打开/关闭时间选择器将不会重新聚焦文本字段,所以我知道这一定是我取消焦点的方式有问题。散焦的正确方法是什么,这样焦点就不会像那样回来了?
Lio*_*oft 19
我想通了,看起来我需要onTap: () => FocusManager.instance.primaryFocus.unfocus()在根部的 GestureDetector 中使用。我很确定这是解决这个特定问题的最佳解决方案,尽管我不确定它是否会引起副作用。
将整个屏幕包裹起来GestureDetector
有两种方法可以关闭键盘\
FocusScope.of(context).requestFocus(FocusNode());import 'package:flutter/services.dart';
SystemChannels.textInput.invokeMethod('TextInput.hide');
Run Code Online (Sandbox Code Playgroud)
所以请尝试用这个编码
import 'package:flutter/services.dart';
onTap(){
SystemChannels.textInput.invokeMethod('TextInput.hide');
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14175 次 |
| 最近记录: |