通过WidgetsBindingObserver实现监听软键盘的弹出关闭
实现WidgetsBindingObserver
class _State extends State<MyPage> with WidgetsBindingObserver {
@override
void initState() {
super.initState();
// 初始化
WidgetsBinding.instance.addObserver(this);
}
@override
void dispose() {
// 销毁
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
// 监听
@override
void didChangeMetrics() {
super.didChangeMetrics();
WidgetsBinding.instance.addPostFrameCallback((_) {
if(mounted){
if(MediaQuery.of(context).viewInsets.bottom==0){
// 关闭键盘
}else{
// 显示键盘
}
}
});
}
}
- 注意
如果MediaQuery.of(context).viewInsets.bottom获取键盘高度如果无论如何都是0,需设置父级Scaffold的resizeToAvoidBottomInset为false
Scaffold(
// 子组件若需要监听键盘高度,需设置为false
resizeToAvoidBottomInset:false,
appBar: AppBar(
title: '页面title',
),
body: ContentPage(),//子页面中监听键盘高度
),