如何在颤动中取消焦点文本字段?

Posted

技术标签:

【中文标题】如何在颤动中取消焦点文本字段?【英文标题】:How to unfocus text field in flutter? 【发布时间】:2020-09-17 11:41:15 【问题描述】:

我不知道这是否是正常的颤动行为,但令人讨厌的是,只有当您点击键盘“确定”按钮失去焦点时才会失去焦点。如果不这样做,光标将在文本字段中保持活动状态。

避免这种情况的最佳做法是什么? (在 gif 中它不太受欢迎,但失去焦点的唯一方法是点击键盘上的“确定”按钮,否则无论您是否点击屏幕的其他区域,光标都将始终处于活动状态)

    Widget _searchBar() 
     return Container(
      child: TextField(
        textAlignVertical: TextAlignVertical.center,
        style: TextStyle(
          textBaseline: TextBaseline.alphabetic,
          color: _styles["gris_oscuro1"]["color"],
        ),
        onChanged: (value) ,
        decoration: InputDecoration(
          filled: true,
          fillColor: _styles["gris_claro"]["color"],
          alignLabelWithHint: true,
          hintText: "Buscar por código",
          hintStyle: TextStyle(color: _styles["gris_oscuro2"]["color"]),
          prefixIcon:
              Icon(Icons.search, color: _styles["gris_oscuro2"]["color"]),
          enabledBorder: OutlineInputBorder(
            borderRadius: BorderRadius.all(Radius.circular(40)),
            borderSide:
                BorderSide(color: _styles["gris_claro"]["color"], width: 1.0),
          ),
        ),
      ),
    );
    );


    Scaffold(
        key: _scaffoldKey,
        backgroundColor: _styles["fondo"]["bg"],
        drawer: MenuWidget(),
        body: SafeArea(
        child: _searchBar(),
        )

【问题讨论】:

堆叠一个手势检测器,当它被点击时会失焦。 @ChristopherMoore 我是 Flutter 新手,能否举个例子 这能回答你的问题吗? How to hide soft input keyboard on flutter after clicking outside TextField/anywhere on screen? 我看过那个答案,但我认为这不是最佳做法。它是?或者有更好的方法吗? body: new GestureDetector( onTap: () FocusScope.of(context).requestFocus(new FocusNode()); , 据我所知,这是唯一的做法。可能还有其他方法,但不是我见过的。 【参考方案1】:

将整页包裹在GestureDetector 中并修改它的onTap 函数如下:

@override
  Widget build(BuildContext context) 
    return GestureDetector(
      onTap: ()  //here
        FocusScope.of(context).unfocus();
        new TextEditingController().clear();
      ,
      child: Container(
      ...
    );
  

【讨论】:

请注意...不要创建新的TextEditingController 对象,因为它们需要使用对象上可用的dispose() 方法进行处理。

以上是关于如何在颤动中取消焦点文本字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动中将焦点转移到下一个文本字段?

如何在颤动中将焦点转移到另一个文本表单字段

如何在 Flutter 中完全取消对 TextField 的关注,而无需稍后返回焦点

如何发现 TextField 编辑被取消/键盘折叠/焦点丢失

如何在颤动的文本字段中处理标签文本? [关闭]

如何在文本字段颤动中删除 suffixIcon 的填充