flutter如何控制键盘的显示与隐藏

在Flutter中,如何通过代码控制软键盘的显示与隐藏?比如点击按钮时弹出键盘,或者输入完成后自动收起键盘。是否有FocusNode以外的更简洁方法?需要注意哪些常见问题(如页面跳转时键盘未关闭)?

2 回复

Flutter中通过FocusNodeFocusScope控制键盘显示与隐藏。使用FocusNodeunfocus()方法隐藏键盘,requestFocus()方法显示键盘。也可用SystemChannels.textInput.invokeMethod('TextInput.hide')强制隐藏。

更多关于flutter如何控制键盘的显示与隐藏的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中,可以通过 FocusNodeFocusScope 来控制键盘的显示与隐藏。以下是具体方法:

1. 隐藏键盘

使用 FocusScope 移除当前焦点,键盘会自动隐藏:

FocusScope.of(context).unfocus();

2. 显示键盘

通过 FocusNode 请求焦点,键盘会自动弹出:

// 创建 FocusNode
FocusNode focusNode = FocusNode();

// 在文本字段中使用
TextField(
  focusNode: focusNode,
)

// 请求焦点(显示键盘)
focusNode.requestFocus();

3. 完整示例

class KeyboardExample extends StatefulWidget {
  @override
  _KeyboardExampleState createState() => _KeyboardExampleState();
}

class _KeyboardExampleState extends State<KeyboardExample> {
  FocusNode focusNode = FocusNode();
  TextEditingController controller = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Padding(
        padding: EdgeInsets.all(20),
        child: Column(
          children: [
            TextField(
              controller: controller,
              focusNode: focusNode,
            ),
            SizedBox(height: 20),
            Row(
              children: [
                ElevatedButton(
                  onPressed: () {
                    focusNode.requestFocus(); // 显示键盘
                  },
                  child: Text('显示键盘'),
                ),
                SizedBox(width: 20),
                ElevatedButton(
                  onPressed: () {
                    FocusScope.of(context).unfocus(); // 隐藏键盘
                  },
                  child: Text('隐藏键盘'),
                ),
              ],
            ),
          ],
        ),
      ),
    );
  }

  @override
  void dispose() {
    focusNode.dispose();
    controller.dispose();
    super.dispose();
  }
}

注意事项:

  • 确保在 dispose() 方法中释放 FocusNodeTextEditingController
  • 隐藏键盘时,当前获得焦点的输入框会失去焦点
  • 在页面跳转时建议自动隐藏键盘,提升用户体验

这种方法适用于大多数需要手动控制键盘显示/隐藏的场景。

回到顶部