当我点击一个TextField
时,它会获得焦点。键盘打开,键入工作正常。现在我打完字,点击除TextField
以外的任何地方,我希望焦点会改变并且键盘会消失,但事实并非如此。
如何在TextField
之外的任何地方进行点击以使其失去焦点?
您可以在文本字段上使用onTapOutsied
TextField(
onTapOutSide: (event){
FocusManager.instance.primaryFocus?.unfocus();
}
),
整个屏幕包裹在GestureDetector
中,以便当您触摸GestureDetector
上的任意位置时,调用onTap
将隐藏软键盘的方法。
new Scaffold(
body: new GestureDetector(
onTap: () {
/*This method here will hide the soft keyboard.*/
FocusScope.of(context).requestFocus(new FocusNode());
},
child: new Container(
//More work here
)
)
一般触摸事件的解决方案
要在焦点小组件外部的交互上折叠键盘,请用Listener
包裹该部分,并从其onPointerDown
回调调用当前 FocusScope 上的unfocus()
。
Listener(
onPointerDown: (event) {
FocusManager.instance.primaryFocus?.unfocus();
},
child: ...
),
在这里,我使用 Listener
而不是 GestureDetector
,因为它会触发任何触摸交互的回调,而不仅仅是点击,这通常是焦点管理的预期行为。
Try this function,
final _emailFocus = FocusNode();
final _passwordFocus = FocusNode();
final _emailController = TextEditController();
child: TextFormField(
keyboardType: TextInputType.text,
textInputAction: TextInputAction.search,
focusNode: _emailFocus,
onFieldSubmitted: (term) {
_emailFocus.unfocus();
FocusScope.of(context).requestFocus(_passwordFocus);
},
controller: _emailController,
decoration: InputDecoration(
border: InputBorder.none,
focusedBorder: InputBorder.none,
),
),
您可以尝试使用以下代码取消聚焦文本字段:
onFieldSubmitted: (term){
currentNode.unfocus();
}