点击TextField可以使其聚焦并弹出键盘。在用户输入TextField之前,我需要向用户显示一个带有选项的对话框。
我可以这样做,但它很难看:首先TextField获得焦点,键盘出现,然后对话框弹出,键盘消失(因为TextField失去焦点(。然后焦点返回到点击的TextField,键盘返回。
我想避免所有的起伏,我不能添加任何额外的按钮来从其他地方调用对话框,而不是点击TextField。
有没有办法让对话框先出现(键盘不显示(,然后选择后焦点转到点击的TextField?
您可以使用一个简单的技巧。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);
在作用域模型/上下文提供程序中存储focusNodes的映射
检查映射是否应该打开特定焦点节点上的对话框。