欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Flutter中输入法框显示状态下打开一个弹出对话框冲突异常的半完美解决办法

程序员文章站 2022-04-17 18:11:32
...

标题有点哗众取宠,锁瑞。
看下面这张图
Flutter中输入法框显示状态下打开一个弹出对话框冲突异常的半完美解决办法
我们来分析一个场景,下面正在输入信用额度,点击帐单日那一条,会弹出对话框供选择,此时输入法框并未消失,对话弹出框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、默认的,没有关闭输入法框,也没有延时,毫无意外爆出异常

Flutter中输入法框显示状态下打开一个弹出对话框冲突异常的半完美解决办法
2、关闭输入法框,延时200毫秒运行

Flutter中输入法框显示状态下打开一个弹出对话框冲突异常的半完美解决办法
比较简单,没什么技术含量,但是确实解决了问题,有更好办法的朋友请告诉。。

相关标签: Flutter