Flutter 在单击内部按钮时避免聚焦于 TextField

标签 flutter

我有一个如下所示的小部件:

address input widget

代码如下所示:

TextField(
  decoration: InputDecoration(
    border: OutlineInputBorder(),
    hintText: 'Enter your address or ZIP code',
    hintStyle: TextStyle(fontSize: 18),
    suffixIcon: IconButton(
      icon: Icon(Icons.gps_fixed),
      onPressed: () {
        ...
      },
    ),
  ),
),

我想要的行为是,当用户单击 GPS 按钮时,TextField 应暂时变为只读并填充当前地址,而不是弹出键盘。从某些 API 获取响应。

问题是,我编写代码的方式导致 TextField 在单击 GPS 按钮时获得焦点。然后,单击处理程序禁用 TextField 执行异步查询,这会导致键盘立即消失。这会创建一个非常卡顿的动画。

有没有办法让 TextField 在单击 GPS 按钮时不获得焦点?

最佳答案

文本字段的后缀图标是其中的一部分,如果单击后缀图标,它也会执行对文本字段的单击。这就是您的键盘弹出的原因。

解决方案: 将文本字段包装到 Stack 中,并确保 IconButton 是它的最后一个子元素。这会执行单击 IconButton 的操作,而不是在文本字段中获得焦点。

Stack(
  alignment: Alignment.centerRight,
  children: <Widget>[
    TextField(),
    IconButton(
      icon: Icon(Icons.add),
      onPressed: () {
        
      },
    ),
  ],
)

关于Flutter 在单击内部按钮时避免聚焦于 TextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64398209/

相关文章:

testing - Flutter:如何测试滚动

android - 如何在启动时启动您的应用程序?

flutter - 将视频剪辑至 5 分钟

dart - 键盘显示时 Flutter Form 消失

scroll - 基于列表的ListView的溢出

list - flutter : The method 'add' was called on null

Flutter:定义自定义 TextStyles 以在整个应用程序中使用

animation - 如何为 AnimatedContainer 设置动画以填充所有可用空间

flutter - 发生更改时,TextFormField光标没有移动

flutter - 在具有附加权限的情况下在与剪贴板数据相关的调试控制台中获取警告错误