美文网首页
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