首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在颤振中完全不聚焦TextField而不让焦点回来

如何在颤振中完全不聚焦TextField而不让焦点回来
EN

Stack Overflow用户
提问于 2020-09-28 18:47:21
回答 3查看 7.9K关注 0票数 5

在我的颤音应用程序中,我有一个文本字段,我希望能够通过点击一个不可交互的组件来移除焦点。这不是textfields在颤振中的默认行为,所以我需要找到一种手动操作的方法。通过遵循https://flutterigniter.com/dismiss-keyboard-form-lose-focus/和其他各种页面中的步骤,我可以在一定程度上工作,这涉及根目录下的GestureDetector和类似于以下内容的onTap:

代码语言:javascript
运行
复制
onTap: () {
  FocusScopeNode cf = FocusScope.of(context);
  if (!cf.hasPrimaryFocus && cf.focusedChild != null) {
    cf.focusedChild.unfocus();
    cf.unfocus();
  }
}

问题是,当我选择文本字段时,单击其他地方(焦点似乎在此时消失),打开一个时间选择器,关闭该时间选择器,文本字段将再次聚焦。如果我通过单击键盘上的“完成”按钮而使文本字段不对焦,那么打开/关闭时间选择器将不会重新调整文本字段的焦点,因此我知道这肯定是我对其不对焦的一个问题。什么是正确的方法,使它不聚焦,这样就不会回来像那样?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-09-28 19:54:04

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

票数 11
EN

Stack Overflow用户

发布于 2020-09-28 18:54:35

将整个屏幕包装到GestureDetector,有两种方法可以拒绝键盘\

  1. FocusScope.of(context).requestFocus(FocusNode());

代码语言:javascript
运行
复制
import 'package:flutter/services.dart';

SystemChannels.textInput.invokeMethod('TextInput.hide');

所以请试着用下面的代码

代码语言:javascript
运行
复制
import 'package:flutter/services.dart';
onTap(){
    SystemChannels.textInput.invokeMethod('TextInput.hide');
   }
票数 6
EN

Stack Overflow用户

发布于 2022-01-04 11:19:21

不需要调用unfocus方法对我起作用的是,我告诉TextField本身不要自己请求关注。在文本字段中,我添加了:

代码语言:javascript
运行
复制
focusNode: FocusNode(canRequestFocus: false),

我相信这是正确的处理方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64107922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档