Как предотвратить дрожание курсора виджета TextField? - флаттер - PullRequest
4 голосов
/ 10 апреля 2020

https://imgur.com/X2gEMqO

Посмотрите видео, чтобы узнать, о чем я говорю ⤴

Прежде чем я начну создавать пользовательские виджеты, я хотел узнать, знает ли кто-нибудь способ исправить это с помощью ванильного флаттера. Похоже, что-то связано с TextEditingController, но я не совсем уверен.

Когда TextField установлен по центру или по правому краю, он, кажется, работает просто отлично, но при левом / пуск / выравнивании это всегда похоже, что это небольшое дрожание.

Заранее спасибо! ~ Я также могу опубликовать это в репозитории Github


Редактировать: Вы можете видеть, что курсор дрожит только тогда, когда он перемещается влево от текстового поля. Когда он движется внутри строки, он вообще не дрожит. Я тестировал это на моделируемой iPhone 11

1 Ответ

2 голосов
/ 11 апреля 2020

Эта проблема состоит из двух частей. Во-первых, cursorOffset text_field.dart по какой-либо причине имеет отрицательное значение x.

Это приводит к застреванию курсора в его контейнере, что делает ширину странной. Во-вторых, свойство TextStyle.height заставляет курсор прыгать.

Я понял, как это исправить, благодаря Павлу!

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. Как только у вас будет готов файл для редактирования, перейдите к cursorOffset в пределах TargetPlatform.iOS , Если ваш файл не изменен, он должен быть примерно в строке 924-i sh.

  3. Измените значения Offset(...) на 1 & 0 (x, y) соответственно или как вы думаете

  4. Если вы правильно продублировали файл text_field.dart, он должен работать сразу же!

Исправить переход курсора

  1. Это исправление намного меньше работы. Просто добавьте виджет TextStyle в свойство style: виджета TextField.

  2. Затем просто заполните свойство height вашего виджета TextStyle тем, что вы думаете! Я обнаружил, что 1.3 был хорошим медианой, но выбрал лучшую высоту для вашего fontSize. Вот некоторая информация о height:


Github Issue Относительно этого

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

...