Flutter 点击空白处关闭软键盘,点击非TextField 关闭软键盘的方法

1:点击空白处(非控件上)关闭软键盘。

    此方法有个问题,就是点击非空白区域,不会关闭软键盘,比如点击旁边的其他按钮,则软键盘还在。只适合点击空白处关闭软键盘

在 main.dart 入口 build 中增加

    builder: (context, child) {
        //xxxxx 操作
        return GestureDetector(
          behavior: HitTestBehavior.translucent,
          // 全局添加点击空白处隐藏键盘
          onTap: () => FocusManager.instance.primaryFocus?.unfocus(),
          // onTap: () {
          //   FocusScopeNode currentFocus = FocusScope.of(context);
          //   if (!currentFocus.hasPrimaryFocus &&
          //       currentFocus.focusedChild != null) {
          //     FocusManager.instance.primaryFocus?.unfocus();
          //   }
          // },

          child: child,
        );
      },
2. 点击非TextField 关闭软键盘

增加Listener 监听

此方法有个问题:点击所有地方都会先关闭软键盘。点击TextField 会先关闭软键盘,然后再重新弹出来。

  builder: (context, child) {
        FlutterSmartDialog.init();
        return Listener(
          onPointerDown: (_) {
            FocusScopeNode currentFocus = FocusScope.of(context);
            if (!currentFocus.hasPrimaryFocus) {
              currentFocus.focusedChild?.unfocus();
            }
          },
          child: child,
        );
      },

3:在TextField 添加此方法,在每个输入框中添加如下方法也可以实现。

     onTapOutside: (event){
          FocusScopeNode currentFocus = FocusScope.of(context);
          currentFocus.focusedChild?.unfocus();
        },

如果您在 Android 12 中关闭了硬件加速器,并且在 Flutter 应用中点击输入框弹出键盘时出现了空白问题,您可以尝试以下解决办法: 1. 启用软键盘适配器 在您的 Flutter 应用中,可以使用软键盘适配器来协调软件渲染引擎和硬件加速器之间的差异。软键盘适配器可以自动调整您的应用程序布局,以避免出现空白问题。您可以在 Flutter 应用中添加以下依赖项: ```yaml dependencies: flutter_keyboard_visibility: ^5.0.0 keyboard_actions: ^3.0.0 ``` 然后,在您的代码中使用 KeyboardActions widget 和 KeyboardVisibilityBuilder widget 来设置软键盘适配器的行为。例如: ```dart import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart'; import 'package:keyboard_actions/keyboard_actions.dart'; class MyWidget extends StatelessWidget { @override Widget build(BuildContext context) { return KeyboardActions( config: KeyboardActionsConfig( keyboardActionsPlatform: KeyboardActionsPlatform.ALL, actions: [ KeyboardActionsItem( focusNode: _focusNode, toolbarButtons: [ (node) { return GestureDetector( onTap: () => node.unfocus(), child: const Text('关闭'), ); }, ], ), ], ), child: Column( children: <Widget>[ TextField( focusNode: _focusNode, decoration: const InputDecoration( hintText: '请输入内容', ), ), KeyboardVisibilityBuilder( builder: (context, visible, child) { return Container( height: visible ? 0 : 0, ); }, ), ], ), ); } } ``` 2. 升级 Flutter 版本 如果您使用的是较旧的 Flutter 版本,则可能会遇到此问题。尝试升级到最新版本,以获取最新的修复程序和功能。 3. 更新 Android 12 系统版本 如果您的 Android 12 系统版本较旧,则可能会出现此问题。尝试更新到最新的 Android 12 系统版本,以获取最新的修复程序和功能。 希望以上解决办法能够帮助您解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值