flutter解决方案:软键盘可见性问题

flutter键盘是否可见这个问题可以说是老大难了,尝试过MediaQuery.of(context).viewInsets.bottom获取键盘高度,此方式要求Scaffold(resizeToAvoidBottomInset: false),否则获取的高度永远是0,但是一旦resizeToAvoidBottomInset: false键盘弹出时页面布局就不能被键盘顶起,导致页面底部的输入框被遮盖,这是不能接受的。从网上找到了解决方案,并简单封装了一下。

  • 代码

资料:Get keyboard height in Flutter

mixin KeyboardLogic<T extends StatefulWidget> on State<T>,WidgetsBindingObserver {
  bool _keyboardVisible;
  
  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
  }

  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }

  @override
  void didChangeMetrics() {
    super.didChangeMetrics();
    if (!mounted) return;
    final temp = keyboardVisible;
    if (_keyboardVisible == temp) return;
    _keyboardVisible = temp;
    onKeyboardChanged(keyboardVisible);
  }

  void onKeyboardChanged(bool visible);


  bool get keyboardVisible =>
      EdgeInsets.fromWindowPadding(
        WidgetsBinding.instance.window.viewInsets,
        WidgetsBinding.instance.window.devicePixelRatio,
      ).bottom >
      100;
}
  • 使用方法
class DemoView extends StatefulWidget {

  const DemoView()

  @override
  _DemoViewState createState() => _DemoViewState();
}

class _DemoViewState extends State<DemoView> with WidgetsBindingObserver, KeyboardLogic {

  @override
  void onKeyboardChanged(bool visible) {
      // TODO deal with keyboard visibility change.
  }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值