flutter如何获取键盘高度
在Flutter中,如何准确获取软键盘的高度?当键盘弹出时,界面布局需要调整,但直接通过MediaQuery获取的视图Insets似乎不包含键盘高度。是否有可靠的方法在不同平台上(iOS/Android)动态监测键盘高度变化?求具体实现方案或推荐插件。
2 回复
在 Flutter 中,可以通过以下方法获取键盘高度:
1. 使用 MediaQuery
通过 MediaQuery.of(context).viewInsets.bottom 获取键盘高度:
double keyboardHeight = MediaQuery.of(context).viewInsets.bottom;
2. 完整示例代码
class KeyboardHeightExample extends StatefulWidget {
@override
_KeyboardHeightExampleState createState() => _KeyboardHeightExampleState();
}
class _KeyboardHeightExampleState extends State<KeyboardHeightExample> {
double _keyboardHeight = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('键盘高度示例')),
body: Column(
children: [
Text('键盘高度: $_keyboardHeight'),
TextField(
decoration: InputDecoration(hintText: '点击输入...'),
),
],
),
floatingActionButton: FloatingActionButton(
onPressed: () {
setState(() {
_keyboardHeight = MediaQuery.of(context).viewInsets.bottom;
});
},
child: Icon(Icons.keyboard),
),
);
}
}
3. 自动监听键盘高度变化
@override
Widget build(BuildContext context) {
final keyboardHeight = MediaQuery.of(context).viewInsets.bottom;
return Scaffold(
body: AnimatedContainer(
duration: Duration(milliseconds: 300),
padding: EdgeInsets.only(bottom: keyboardHeight),
child: YourContentWidget(),
),
);
}
注意事项:
viewInsets.bottom在键盘显示时返回高度,隐藏时为 0- 需要在
build方法中获取,确保能访问到最新的上下文 - 键盘高度因设备和输入法而异
- 使用
AnimatedContainer可以实现平滑的布局调整
这种方法简单有效,适用于大多数需要获取键盘高度的场景。


