【问题标题】:How to prevent TextField widget's cursor from jittering? - Flutter如何防止 TextField 小部件的光标抖动? - 颤振
【发布时间】:2020-07-23 12:32:04
【问题描述】:

https://imgur.com/X2gEMqO

观看视频了解我在说什么⤴

在我开始制作自定义小部件之前,我想看看是否有人知道使用 vanilla Flutter 解决此问题的方法。这似乎与 TextEditingController 有关,但我不完全确定。

当 TextField 设置为 center 或 right align 时,它似乎工作得很好,但是当它在 left / start / justify 时,它似乎总是有轻微的抖动。

提前致谢! ~ 我也可以将它发布到 Github 存储库


编辑:您可以看到光标仅在移动到文本字段左侧时才会抖动。当它在弦内移动时,它根本不会抖动。我在模拟的 iPhone 11 上对此进行了测试

【问题讨论】:

标签: flutter flutter-animation


【解决方案1】:

这个问题有两个部分。首先,无论出于何种原因,text_field.dart 的cursorOffset 都有一个负的 x 值。

这会导致光标卡在它的容器中,使宽度看起来很奇怪。其次,TextStyle.height 属性会导致光标跳转。

感谢 Pavel,我想出了如何解决这个问题!

TextField - 字体大小 50.0 / 高度 1.30
https://imgur.com/gallery/G9bkcIf

TextField - 字体大小 20.0 / 高度 1.30
https://imgur.com/gallery/x7a5nzM


修复光标偏移

  1. cursorOffset 值存储在 text_field.dart 文件中。在 为了编辑它,您可能应该创建一个副本 text_field.dart 文件进行自定义。 Here's how to do that, 虽然您可能会通过 Google 找到更好的答案

  2. 准备好编辑文件后,导航至cursorOffsetTargetPlatform.iOS 内。它应该在第 924 行附近,如果 您的文件未修改。

  3. Offset(...) 的值分别更改为 0 & 0 (x, y) 或 任何你认为合适的。

  4. 如果你正确地复制了 text_field.dart 文件,那么它应该 马上开始工作!

修复光标跳转

  1. 这个修复工作少了很多。只需将 TextStyle 小部件添加到 style: TextField 小部件的属性。

  2. 然后,只需填写 TextStyle 小部件的 height 属性 随你所想!我发现 1.3 是一个很好的中位数,但选择 字体大小的最佳高度。 Here's some information on height:


关于这个的 Github 问题

https://github.com/flutter/flutter/issues/31661

【讨论】:

  • 第二种解决方案限制了我选择文本的高度属性。如果我需要大于 1.3 的高度怎么办?
猜你喜欢
  • 1970-01-01
  • 2022-08-02
  • 2020-12-13
  • 2020-05-13
  • 1970-01-01
  • 2019-05-23
  • 2021-04-30
  • 2019-07-15
  • 1970-01-01
相关资源
最近更新 更多