Flutter——用户关闭键盘后强制拉起键盘

发布于:2024-03-29 ⋅ 阅读:(85) ⋅ 点赞:(0)

Bug背景

今天在弄输入框的时候,发现用户手动关闭键盘后,因为自定义组件的特殊性,我在点击输入框后并没有唤起键盘。

一般点击输入框或者某个组件:

GestureDetector(
  onTap: () {
    FocusScope.of(context).requestFocus(_focusNode);
  },
  child: YourWidget(),
),

 我们直接聚焦,就可以弹起键盘。

将带有焦点的控件与TextFieldTextFormField小部件关联起来,并使用focusNode属性将其与之前创建的FocusNode实例关联:

TextField(
  focusNode: _focusNode,
  // 其他属性
),

但是在我这边的需求里,当用户手动关闭键盘时,他还在聚焦,我这时候,点击输入框,但是它并不会弹起来,于是

首先:

1.使用KeyboardVisibilityBuilder来监听键盘的可见性状态。在builder回调中,根据isKeyboardVisible的值来判断键盘是否关闭。

首先,在pubspec.yaml文件中添加keyboard_visibility插件的依赖:

dependencies:
  keyboard_visibility: ^0.7.0
import 'package:keyboard_visibility/keyboard_visibility.dart';

KeyboardVisibilityBuilder(
  builder: (context, isKeyboardVisible) {
    if (isKeyboardVisible) {
      // 键盘是打开的
      print('键盘是打开的');
    } else {
      // 键盘是关闭的
      print('键盘是关闭的');
    }
    return YourWidget();
  },
),

在我的组件的onTap事件里:

if (_focusNode.hasFocus&&!isKeyboardVisible) {
              _focusNode.unfocus();
              await Future.delayed(Duration(milliseconds: 200));
              FocusScope.of(context).requestFocus(_focusNode);
            }

单独处理,输入框在聚焦情况下,用户手动关闭键盘,下次点击输入框仍无法弹起,先让组件失焦然后聚焦就可以弹起键盘了。


网站公告

今日签到

点亮在社区的每一天
去签到