如何使点击文本字段之外的任何地方使其失去焦点



当我点击一个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();
}

相关内容

最新更新