赞
踩
因公司项目需求,需要监听键盘的显示和消失,但是根据网上寻找的方法还是踩了不少坑,今天就把踩的坑和如何监听键盘记录一下
@override
void initState() { //初始化程序
super.initState();
WidgetsBinding.instance.addObserver(this); //注册监听器
}
没错,这就是我踩坑的地方,必须先继承WidgetsBindingObserver类才可以调用重写didChangeMetrics方法
class _MenTabState extends State<MenTab> with WidgetsBindingObserver {
}
bool isShow = false;
@override
void didChangeMetrics() { //系统窗口相关改变回调,如旋转
super.didChangeMetrics();
WidgetsBinding.instance.addPostFrameCallback((_) {
setState(() {
//因为判断键盘的方法失效,改用变量进行判断
//更改键盘状态
isShow = !isShow;
//MediaQuery.of(context).viewInsets.bottom == 0 键盘是否显示判断方法
});
});
}
@override
void dispose() {
super.dispose();
print('页面销毁');
WidgetsBinding.instance.removeObserver(this);
}
class _MenTabState extends State<MenTab> with WidgetsBindingObserver {
@override
void initState() {
//初始化程序
super.initState();
WidgetsBinding.instance.addObserver(this); //注册监听器
}
bool isShow = false;
@override
void didChangeMetrics() { //系统窗口相关改变回调,如旋转,键盘调用
super.didChangeMetrics();
WidgetsBinding.instance.addPostFrameCallback((_) {
setState(() {
//更改键盘状态
isShow = !isShow;
print("isShow");
print(isShow);
});
});
}
@override
void dispose() {
super.dispose();
//取消订阅
print('页面销毁');
WidgetsBinding.instance.removeObserver(this);
_controller.dispose();
}
//监听文本框
TextEditingController _controller = new TextEditingController();
@override
Widget build(BuildContext context) {}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。