flutter - 在键盘打开之前在 TextField 中点击打开对话框 - Flutter
问题描述
在 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);
推荐阅读
- go - 将标准输出和标准输入复制到 ssh 隧道,不适用于 fmt.Print
- groovy - Gremlin 根据其元属性检索多个属性
- typescript - ESLint 在 Visual Studio 2017 或 2019 中不起作用
- javascript - 使用 JavaScript 从二维数组中搜索单词
- javascript - jQuery:如果包含空子跨度,则将类添加到父 div
- time-series - 将大量传感器数据发送到 QuestDB 中哪种方法更快或更好?
- sql - SQL Query - 查找唯一数据条目的数量
- swift - NSTextField、文本选择和鼠标事件
- reactjs - nginx 上 Cloudflare、ExpressJS 和 ReactJS 的 CORS 错误
- swiftui - 如何从另一个视图更新类中的结构?(迅速)