在键盘打开之前在 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);
点击 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);