【问题标题】:Open dialog on tap in TextField before keyboard opens - Flutter在键盘打开之前在 TextField 中点击打开对话框 - Flutter
【发布时间】:2020-10-30 06:51:18
【问题描述】:

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

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

我想避免所有的起起落落,除了点击 TextField 之外,我无法添加任何额外的按钮来从其他地方调用对话框。

有没有办法让对话框首先出现(不显示键盘)并且选择之后将焦点转到点击的文本字段?

【问题讨论】:

    标签: flutter dialog keyboard textfield


    【解决方案1】:

    您可以遵循一个简单的技巧。 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);
    

    【讨论】:

    • 感谢您的回答。很高兴知道这个技巧。但在我的情况下,我有一系列由 GridView 生成的 TextField 和 Controller,它们都包装在 FocusScope 中,无法引用单个节点或单个 TextField。它的设置方式将使所有 TextFields 都是只读的,我只需要一些来拥有对话框选择行为。这是一个填字游戏。抱歉,我没有发布任何代码,但它现在很长,涉及很多其他内容......
    • 谢谢,没问题:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多