Flutter 让软键盘不再自动弹起

1、问题说明:

在开发中,经常遇到这种事,一个页面有输入框,点击输入框后,会弹起软键盘,同时输入框会聚焦,手动收起软键盘后,点击另一个按钮前往下一个页面或者显示一个弹窗,返回或者关闭弹窗后,由于输入框仍然有焦点,软键盘又会自动弹起,非常影响使用体验。

2、问题解决:

Dart 复制代码
FocusManager.instance.primaryFocus?.unfocus();

在【点击另一个按钮前往下一个页面或者显示一个弹窗】这一步的时候执行一下上面那行代码,会清除焦点并收起软键盘。

但是这里还有一个问题,稍微复杂一点的页面,可能会有很多按钮能显示弹窗或打开新页面,这样的话岂不是要在每一个按钮点击那里都写上那行代码?

当然,我们可以封装显示弹窗和页面跳转的方法,比如:

image.png

这样,每次页面跳转都可以用这个open方法去执行。

至此,可以解决大部分情况了。

但是,还有一种特殊情况,如果该页面有引入某些第三方库显示弹窗内容的话,就又要封装一个方法去调用第三方库,毕竟直接调用第三方库是不会执行那行代码的。

比如第三方的一个DatePicker,一个选择日期时间的底部弹窗。

不能直接调用第三方方法,还要去封装一层,的确是有点麻烦了,所以,下面再介绍一个终极解决方法:

首先要引入第三方库: keyboard_utils: ^1.3.0

这个库可以用来监听软键盘的弹起和收起。

我们可以在监听到软键盘收起的时候执行下面这行代码

Dart 复制代码
 FocusManager.instance.primaryFocus?.unfocus();

具体代码如下:

Dart 复制代码
  KeyboardUtils _keyboardUtils = KeyboardUtils();

  @override
  void initState() {
    _keyboardUtils.add(
        listener: KeyboardListener(
            willHideKeyboard: () {
              FocusManager.instance.primaryFocus?.unfocus();
            },
            willShowKeyboard: (double keyboardHeight) {}));
    super.initState();
  }

  @override
  void dispose() {
    if (_keyboardUtils.canCallDispose()) {
      _keyboardUtils.dispose();
    }
    super.dispose();
  }
相关推荐
布列瑟农的星空9 小时前
Playwright使用体验
前端·单元测试
卤代烃9 小时前
🦾 可为与不可为:CDP 视角下的 Browser 控制边界
前端·人工智能·浏览器
_XU10 小时前
AI工具如何重塑我的开发日常
前端·人工智能·深度学习
C_心欲无痕10 小时前
vue3 - defineExpose暴露给父组件属性和方法
前端·javascript·vue.js·vue3
鹿人戛10 小时前
HarmonyOS应用开发:相机预览花屏问题解决案例
android·前端·harmonyos
萌萌哒草头将军10 小时前
绿联云 NAS 安装 AudioDock 详细教程
前端·docker·容器
GIS之路11 小时前
GIS 数据转换:使用 GDAL 将 GeoJSON 转换为 Shp 数据
前端
2501_9444460011 小时前
Flutter&OpenHarmony文件夹管理功能实现
android·javascript·flutter
朴shu11 小时前
Luckysheet 远程搜索下拉 控件开发 : 揭秘二开全流程
前端
MediaTea12 小时前
Python:模块 __dict__ 详解
开发语言·前端·数据库·python