如何在颤动中取消焦点文本字段?
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 的关注,而无需稍后返回焦点