在键盘打开之前在 TextField 中点击打开对话框 - Flutter

Open dialog on tap in TextField before keyboard opens - Flutter

点击 TextField 使其获得焦点并弹出键盘。在 she/he 键入 TextField 之前,我需要向用户显示一个带有选择的对话框。

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

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

有没有办法让对话框先出现(不显示键盘),然后选择焦点转到点击的 TextField 之后?

您可以遵循一个简单的技巧。 TextField 有一个 read-only 属性,您可以在该 read-only 属性上使用标志。当用户从弹出窗口中选择一个选项时,将焦点更改到该 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);