flutter如何监听键盘收起事件

在Flutter开发中,如何监听Android/iOS软键盘的收起事件?目前使用FocusNode可以检测键盘弹出,但键盘收起时没有触发回调。尝试过WidgetsBindingObserver的didChangeMetrics,但不够精准。有没有可靠的跨平台方案来捕获键盘收起动作?

2 回复

在Flutter中,使用FocusNode监听键盘收起事件。通过FocusNodeunfocus方法或FocusScope.of(context).unfocus()触发收起,结合FocusFocusScopeonFocusChange回调监听焦点变化。

更多关于flutter如何监听键盘收起事件的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中,可以通过 FocusNode 监听键盘的收起事件。以下是具体实现方法:

  1. 创建 FocusNode:在 Widget 的 initState 中初始化 FocusNode。
  2. 添加监听器:为 FocusNode 添加监听器,当焦点状态变化时触发回调。
  3. 管理生命周期:在 dispose 中释放 FocusNode 以避免内存泄漏。

示例代码:

import 'package:flutter/material.dart';

class KeyboardListenerExample extends StatefulWidget {
  @override
  _KeyboardListenerExampleState createState() => _KeyboardListenerExampleState();
}

class _KeyboardListenerExampleState extends State<KeyboardListenerExample> {
  FocusNode _focusNode = FocusNode();

  @override
  void initState() {
    super.initState();
    _focusNode.addListener(() {
      if (!_focusNode.hasFocus) {
        // 键盘收起时的处理逻辑
        print('键盘已收起');
      }
    });
  }

  @override
  void dispose() {
    _focusNode.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: TextField(
          focusNode: _focusNode,
          decoration: InputDecoration(hintText: '点击输入'),
        ),
      ),
    );
  }
}

说明

  • TextField 失去焦点时(例如用户点击其他区域),键盘会自动收起,触发监听器中的逻辑。
  • 此方法适用于监听单个输入框的焦点变化,若需全局监听,可结合 FocusScope 使用。
回到顶部