首页 > 解决方案 > 在键盘打开之前在 TextField 中点击打开对话框 - Flutter

问题描述

在 TextField 中点击会使其获得焦点并弹出键盘。在她/他输入文本字段之前,我需要向用户显示一个带有选择的对话框。

我可以做到,但它很丑:首先 TextField 获得焦点并且键盘出现,然后弹出对话框并且键盘消失(因为 TextField 失去焦点)。然后焦点回到点击的 TextField 上,键盘又回来了。

我想避免所有的起伏,我不能添加任何额外的按钮来从其他地方调用对话框,然后点击 TextField。

有没有办法让对话框首先出现(没有键盘出现),然后选择焦点转到点击的文本字段?

标签: flutterdialogkeyboardtextfield

解决方案


您可以遵循一个简单的技巧。TextField 有一个只读属性,你可以在那个只读属性上使用一个标志。当用户从弹出窗口中选择一个选项时,将焦点更改为该 TextField。

bool readOnly = true;
FocusNode f1 = FocusNode();

TextFormField(                                
     read-only: readOnly ,
     focusNode: f1,
     decoration: InputDecoration(
     border: OutlineInputBorder(
     borderRadius: BorderRadius.circular(4.0)
      ),
      ),
     style: TextStyle(
      color: Colors.orange,
      fontSize: 15.0,
      ),
      ),

选择时在您的对话框代码上:

readOnly = false;
FocusScope.of(context).requestFocus(f1);

推荐阅读