如何防止 TextField 小部件的光标抖动? - 颤振

How to prevent TextField widget's cursor from jittering? - Flutter

https://imgur.com/X2gEMqO

看看视频看看我在说什么⤴

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

当 TextField 设置为居中或右对齐时,它似乎工作得很好,但是当在左侧/开始/对齐时,它似乎总是有轻微的抖动。

提前致谢! ~ 我也可以 post 这个到 Github 存储库


编辑:您可以看到光标只有在移动到文本框左侧时才会抖动。当它在弦内移动时,它根本不会抖动。我在模拟 iPhone 11

上测试这个

这个问题有两个部分。首先,text_field.dart 的 cursorOffset 出于某种原因具有负 x 值。

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

I figured out how to fix this thanks to 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 要自定义的文件。 , 尽管您可能会使用 Google

    找到更好的答案
  2. 准备好要编辑的文件后,导航至 cursorOffsetTargetPlatform.iOS 内。它应该在第 924 行左右,如果 您的文件未被修改。

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

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

修复光标跳转

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

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


Github 关于此的问题

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