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();
  }
相关推荐
猛扇赵四那边好嘴.10 小时前
Flutter 框架跨平台鸿蒙开发 - 诗词鉴赏应用开发教程
flutter·华为·harmonyos
心.c10 小时前
文件上传 - 入门篇
前端·javascript·vue.js·node.js·js
IT陈图图10 小时前
跨端之旅:Flutter × OpenHarmony 构建旅行记录应用的搜索栏
flutter·开源·鸿蒙·openharmony
—Qeyser10 小时前
Flutter组件 - BottomNavigationBar 底部导航栏
开发语言·javascript·flutter
时光慢煮10 小时前
行旅迹 · 基于 Flutter × OpenHarmony 的旅行记录应用— 构建高体验旅行记录列表视图的跨端实践
flutter·华为·开源·openharmony
hxjhnct10 小时前
CSS 伪类和伪元素
前端·javascript·css
❆VE❆10 小时前
【css】打造倾斜异形按钮:CSS radial-gradient 与抗锯齿实战解析
前端·javascript·css
IT陈图图10 小时前
Flutter × OpenHarmony 跨端汇率转换:常用货币对构建与实现解析
flutter·鸿蒙·openharmony
时光慢煮10 小时前
行走的记忆卡片:基于 Flutter × OpenHarmony 的旅行记录应用实践——单个旅行记录卡片构建详解
flutter·华为·开源·openharmony
followYouself10 小时前
ViewPager+Fragment
android·前端