bool isShowKeyboard = false;
double keyboardSize = 260; //软键盘高度
//类添加with WidgetsBindingObserver,生命周期监听器
class SendRedEveDialogState extends State<SendRedEveDialog> with WidgetsBindingObserver
//首先给编辑框做一个焦点
final FocusNode _sumFocusNode = FocusNode();
//在init中作监听
WidgetsBinding.instance!.addObserver(this);
//输入框焦点监测
_sumFocusNode.addListener(() {
if (_sumFocusNode.hasFocus) {//如果输入框被点击
if (MediaQuery.of(context).viewInsets.bottom > 0) {//如果键盘有弹起
//键盘已弹起
isShowKeyboard = true;
}
} else {
//如果没有被点击,就是没弹起键盘
isShowKeyboard = false;
}
mySetState(() {});
});
//didChangeMetrics可以监听界面高度的变化。其中键盘的弹出和收起这些其实都属于高度的变化自然也是可以监听到的
@override
void didChangeMetrics() {
super.didChangeMetrics();
WidgetsBinding.instance!.addPostFrameCallback((_) {
// 以后是安卓零碎并且在焦点聚焦的状况下
if (Platform.isAndroid && _sumFocusNode.hasFocus) {
if (MediaQuery.of(context).viewInsets.bottom > 0) {
isShowKeyboard = true;
} else {
isShowKeyboard = false;
}
mySetState(() {});
}
});
}
TextField(
//只允许输入小数
inputFormatters: [
FilteringTextInputFormatter.allow(
RegExp("[0-9.]")),
],
focusNode: _sumFocusNode,//添加焦点
controller: _sumController,
keyboardType: TextInputType.number,
maxLines: 1,
textInputAction: TextInputAction.done,
textAlign: TextAlign.right,
decoration: InputDecoration(
// contentPadding: EdgeInsets.only(
// left: 5.0.r, right: 5.0.r),
focusColor: Colors.white,
border: InputBorder.none,
hintText:
S.current.lucky_bag_input_coin_tips,
hintStyle: TextStyle(
fontSize: 14.0.sp,
color: const Color(0xFFBCBCBC))),
style: TextStyle(
color: Colors.black, fontSize: 14.0.sp),
),
//最后就设置高度了,Global.keyboardHeight==0,如果键盘弹起,就用260,否则就用30
TopPadding(isShowKeyboard
? (Global.keyboardHeight > keyboardSize.truncate()
? Global.keyboardHeight
: keyboardSize) +
15
: 30),
@override
void dispose() {
_sumController.dispose();
_sumFocusNode.dispose();
WidgetsBinding.instance!.removeObserver(this);
super.dispose();
}