如图片,弹窗中带有TextField,要求弹窗出来就跳出软键盘,这个简单,设置TextField 属性autofocus:true,但是如果让软键盘消失,再次点击textfield让软键盘弹出,就需要在软键盘消失的时候让TextField失去焦点,那就需要监控软键盘出现和消失的监听。
class PasswordInputTextFieldState with WidgetsBindingObserver
void initState() {
WidgetsBinding.instance.addObserver(this);
}
@override
void didChangeMetrics() {
super.didChangeMetrics();
WidgetsBinding.instance.addPostFrameCallback((_) {
if(MediaQuery.of(context).viewInsets.bottom==0){
print("=============关闭键盘==============");
widget.node.unfocus();
}else{
print("=============显示键盘==============");
}
});
可是有些手机会失败,比如小米、OPPO等手机,原因是这些手机软键盘弹出的时候,会先调用关闭键盘监听,这就会导致刚弹出键盘就消失了 因为失去了焦点。因此需要立一个Flag解决这个问题。
// 当前键盘是否是激活状态
boolisKeyboardActived;
@override
void didChangeMetrics() {
super.didChangeMetrics();
WidgetsBinding.instance.addPostFrameCallback((_) {
//当前是安卓系统并且在焦点聚焦的情况下
if(MediaQuery.of(context).viewInsets.bottom==0){
//关闭键盘
print("=============关闭键盘==============");
if (isKeyboardActived) {
isKeyboardActived =false;
widget.node.unfocus();
}
}else{
isKeyboardActived =true;
print("=============显示键盘==============");
//显示键盘
}
});
} 解决问题!