Помните, не так давно рассказывал вам, как мы решили перейти на state-based TextField и что из этого вышло? Так вот, это была ошибка, и я уже десять раз пожалел, что вообще затеял эту миграцию. Но ирония в том, что в Jetpack Compose 1.13.0-alpha03 старые текстовые поля уже пометили как deprecated, и рано или поздно всё равно придётся мигрировать.
Хочу поделиться проблемами, с которыми мы столкнулись, помимо тех, о которых я писал раньше.
1. Нам нужно было сохранить возможность использовать старый API с value и onValueChange, но решение в лоб с двумя LaunchedEffect оказалось нерабочим при быстром вводе символов. Пришлось реализовывать довольно муторную синхронизацию состояния.
2. Ограничение длины текста теперь нельзя реализовать только на уровне бизнес-логики, необходимо ещё и ограничивать текст через InputTransformation.
3. Нельзя использовать OutputTransformation для добавления каких-нибудь единиц измерения в текстовое поле с клавиатурой типа Decimal: это ломается, например, на устройствах Xiaomi. Для этого нужно использовать prefix или postfix как в Material TextField.
4. Также столкнулись с проблемами на iOS в Compose Multiplatform. Например, Saver крашил приложение, а при вводе символов появлялось контекстное меню.
В итоге на какой-то базовый компонент пришлось потратить много времени и сил. Так что на вашем месте я бы не спешил отказываться от старого доброго TextField и подождал, пока в новом наконец всё стабилизируется.
Post #268
821
- 👍 20
- 💯 5
- 🔥 4
- 😱 3
- 😢 2