当前位置:   article > 正文

flutter 监听键盘及didChangeMetrics重写失败

didchangemetrics

因公司项目需求,需要监听键盘的显示和消失,但是根据网上寻找的方法还是踩了不少坑,今天就把踩的坑和如何监听键盘记录一下

1.监听键盘

 @override

  void initState() { //初始化程序

    super.initState();

    WidgetsBinding.instance.addObserver(this); //注册监听器

  }

2.继承WidgetsBindingObserver类 

没错,这就是我踩坑的地方,必须先继承WidgetsBindingObserver类才可以调用重写didChangeMetrics方法

class _MenTabState extends State<MenTab> with WidgetsBindingObserver {

}

3.重写didChangeMetrics方法

bool isShow = false; 

@override

  void didChangeMetrics() {     //系统窗口相关改变回调,如旋转

    super.didChangeMetrics();

    WidgetsBinding.instance.addPostFrameCallback((_) {

      setState(() {

        //因为判断键盘的方法失效,改用变量进行判断

        //更改键盘状态

        isShow = !isShow;

        //MediaQuery.of(context).viewInsets.bottom == 0 键盘是否显示判断方法

      });

    });

  }

4.取消监听

  @override

  void dispose() {

    super.dispose();

    print('页面销毁');

    WidgetsBinding.instance.removeObserver(this);

  }

完整代码 

class _MenTabState extends State<MenTab> with WidgetsBindingObserver {

  @override

  void initState() {

    //初始化程序

    super.initState();

    WidgetsBinding.instance.addObserver(this); //注册监听器

  }

  bool isShow = false;

  @override

  void didChangeMetrics() {   //系统窗口相关改变回调,如旋转,键盘调用

    super.didChangeMetrics();

    WidgetsBinding.instance.addPostFrameCallback((_) {

      setState(() {

        //更改键盘状态

        isShow = !isShow;

        print("isShow");

        print(isShow);

      });

    });

  }

  @override

  void dispose() {

    super.dispose();

    //取消订阅

    print('页面销毁');

    WidgetsBinding.instance.removeObserver(this);

    _controller.dispose();

  }

//监听文本框

  TextEditingController _controller = new TextEditingController();

  @override

  Widget build(BuildContext context) {}

}

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号