美文网首页
Flutter TextField焦点跳出软键盘,隐藏软键盘失去

Flutter TextField焦点跳出软键盘,隐藏软键盘失去

作者: xiaovtoulu | 来源:发表于2021-12-21 11:10 被阅读0次

如图片,弹窗中带有TextField,要求弹窗出来就跳出软键盘,这个简单,设置TextField 属性autofocus:true,但是如果让软键盘消失,再次点击textfield让软键盘弹出,就需要在软键盘消失的时候让TextField失去焦点,那就需要监控软键盘出现和消失的监听。

class PasswordInputTextFieldState with WidgetsBindingObserver

void initState() {

WidgetsBinding.instance.addObserver(this);

}

@override

void didChangeMetrics() {

super.didChangeMetrics();

  WidgetsBinding.instance.addPostFrameCallback((_) {

 if(MediaQuery.of(context).viewInsets.bottom==0){

      print("=============关闭键盘==============");

 widget.node.unfocus();

}else{

      print("=============显示键盘==============");

    }

});

可是有些手机会失败,比如小米、OPPO等手机,原因是这些手机软键盘弹出的时候,会先调用关闭键盘监听,这就会导致刚弹出键盘就消失了 因为失去了焦点。因此需要立一个Flag解决这个问题。

// 当前键盘是否是激活状态

  boolisKeyboardActived;

@override

void didChangeMetrics() {

super.didChangeMetrics();

  WidgetsBinding.instance.addPostFrameCallback((_) {

//当前是安卓系统并且在焦点聚焦的情况下

    if(MediaQuery.of(context).viewInsets.bottom==0){

//关闭键盘

      print("=============关闭键盘==============");

      if (isKeyboardActived) {

isKeyboardActived =false;

        widget.node.unfocus();

      }

}else{

isKeyboardActived =true;

      print("=============显示键盘==============");

      //显示键盘

    }

});

} 解决问题!

相关文章

网友评论

      本文标题:Flutter TextField焦点跳出软键盘,隐藏软键盘失去

      本文链接:https://www.haomeiwen.com/subject/fxqaxrtx.html