Flutter中输入法框显示状态下打开一个弹出对话框冲突异常的半完美解决办法
程序员文章站
2022-04-17 18:11:32
...
标题有点哗众取宠,锁瑞。
看下面这张图
我们来分析一个场景,下面正在输入信用额度,点击帐单日那一条,会弹出对话框供选择,此时输入法框并未消失,对话弹出框UI直接顶到了输入框,强制把输入框踢走,异常产生。
解决办法:
1,关闭输入框
2,在输入法框还未完成关闭的时候,延时小段时间
步骤:
1、设置输入框焦点控制器。
//在类文件中新增焦点控制器
FocusNode creditlimitFocus = FocusNode();
//在TextField上绑定焦点控制器
TextField(
keyboardType: TextInputType.number,
maxLines: 1,
textAlign: TextAlign.right,
focusNode: creditlimitFocus,
2、调用弹出框前使TextField失去焦点,输入框即关闭,再延时调用弹出框
onTap: (){
//输入框失去焦点
if(creditlimitFocus.hasFocus)
creditlimitFocus.unfocus();
//延时80毫秒
int delay = 80;
Future.delayed(Duration(milliseconds: delay), (){
print("延时$delay毫秒执行");
showDialog<Null>(
context: context,
builder: (BuildContext context) {
效果
1、默认的,没有关闭输入法框,也没有延时,毫无意外爆出异常
2、关闭输入法框,延时200毫秒运行
比较简单,没什么技术含量,但是确实解决了问题,有更好办法的朋友请告诉。。
上一篇: 漫谈Git和Github
下一篇: vue项目部署到码云的pages服务器上