У меня возникают задержки после первого нажатия клавиши, а затем все работает гладко. Это происходит как при отладке, так и при выпуске (с минимизацией)
Ниже можно компоновать AppInputText:
@OptIn(ExperimentalMaterial3Api::class) @Композитный забавный AppInputText( модификатор: Модификатор = Модификатор, valueProvider: () -> Строка, onValueChange: (String) -> Единица измерения, labelText: String = "Илость", labelTextStyle: TextStyle = MaterialTheme.typography.labelMedium.copy( FontFamily = FontFamily(Шрифт(R.font.open_sans_extrabold)), ), isSuffixEnabled: Boolean = ложь, inputTextStyle: TextStyle = MaterialTheme.typography.titleLarge.copy( lineHeight = 22.sp, FontWeight = FontWeight.Жирный, цвет = Цвет (0xFF495A81).копия (альфа = 0,78f), textAlign = if (isSuffixEnabled) TextAlign.End else TextAlign.Start, ), RegisterQuantity: () -> Единица = {}, isEnabled: Boolean = true, isReadOnly: логическое значение = ложь, Тип клавиатуры: Тип клавиатуры = Тип клавиатуры.Номер, сумма: Int = 1, PlaceholderText: String = "Здесь также есть wpisz…", ) { val InteractionSource: MutableInteractionSource = помните { MutableInteractionSource() } вал SingleLine = истина val цвета = OutlinedTextFieldDefaults.colors( focusBorderColor = Цвет (0xFF667396), unfocusedBorderColor = Цвет (0xFF8892AC), focusLabelColor = Цвет (0xFF8892AC), unfocusedLabelColor = Цвет (0xFF8892AC), focusContainerColor = Цвет.Белый, unfocusedContainerColor = Цвет.Белый, errorContainerColor = Цвет.Белый, отключенныйКонтейнерЦвет = Цвет.Белый, focusTextColor = Color(0xFF495A81).copy(alpha = 0.78f), unfocusedTextColor = Color(0xFF495A81).copy(alpha = 0.78f), unfocusedTrailingIconColor = Color(0xFF495A81).copy(alpha = 0.6f), focusTrailingIconColor = Color(0xFF495A81).copy(alpha = 0.6f), ) val focusRequester = запомнить { FocusRequester() } val focusManager = LocalFocusManager.current val TrailingIconText = @Composable { Икона( модификатор = Модификатор .clip(CircleShape) .кликабельный { onValueChange("") focusRequester.requestFocus() } .requiredSize(34.dp) .padding(5.dp) .фон( цвет = MaterialTheme.colorScheme.onSurface.copy(альфа = 0.12f), форма = Форма Круга ) .padding(4.dp), imageVector = Icons.Filled.Close, оттенок = MaterialTheme.colorScheme.surface.copy(alpha = 0.87f), contentDescription = "Очистить значок" ) } Базовоетекстовое поле( значение = значениеПоставщик(), onValueChange = onValueChange, модификатор = модификатор .defaultMinSize(minHeight = 52.dp) .focusRequester(focusRequester), Источник взаимодействия = Источник взаимодействия, включено = включено, readOnly = isReadOnly, одиночная линия = одиночная линия, текстовый стиль = входной текстовый стиль, Параметры клавиатуры = Параметры клавиатуры( imeAction = if (valueProvider().isNotBlank()) ImeAction.Done иначе ImeAction.Send, Тип клавиатуры = Тип клавиатуры, ), действия клавиатуры = Действия клавиатуры( onDone = { defaultKeyboardAction(ImeAction.Done) focusManager.clearFocus() зарегистрироватьКоличество() } ) ) {basicTextField -> OutlinedTextFieldDefaults.DecorationBox( isError = valueProvider().isBlank(), заполнитель = { если (valueProvider().isBlank()) { Текст( модификатор = Modifier.padding(вертикальный = 6.dp), текст = заполнительТекст, стиль = MaterialTheme.typography.labelMedium.copy( размер шрифта = 16.сп, FontFamily = FontFamily(Шрифт(R.font.lato_light)), цвет = MaterialTheme.colorScheme.onSurface.copy(альфа = 0,46f), ) ) } }, значение = значениеПоставщик(), визуальнаяТрансформация = ВизуальнаяТрансформация.Нет, внутреннийтекстовое поле = базовое текстовое поле, метка = { Текст( текст = labelText.uppercase(), стиль = стиль меткитекста ) }, одиночная линия = одиночная линия, включено = включено, суффикс = { если (isSuffixEnabled) { Ряд { Текст( текст = " z $сумма", textAlign = TextAlign.Начало, стиль = MaterialTheme.typography.titleLarge.copy( lineHeight = 22.sp, FontWeight = FontWeight.Жирный, цвет = Цвет (0xFF495A81).копия (альфа = 0,78f), ), ) Spacer(модификатор = Modifier.fillMaxWidth(0.8f)) } } }, TrailingIcon = if (valueProvider().isNotBlank() && !isReadOnly) TrailingIconText else null, Источник взаимодействия = Источник взаимодействия, contentPadding = OutlinedTextFieldDefaults.contentPadding( верх = 8.дп, низ = 8.дп ), цвета = цвета, контейнер = { OutlinedTextFieldDefaults.ContainerBox( включено = включено, isError = valueProvider().isBlank(), цвета = цвета, Источник взаимодействия = Источник взаимодействия, форма = RoundedCornerShape(11.dp), unfocusedBorderThickness = 1.33.dp, focusBorderThickness = 2.dp ) }, ) } } Через valueProvider я передаю текстовое состояние, а через onValueChange состояние обновляется с помощью событий, моделей представления и т. д. Я пробовал использовать DerivedStateOf, но это не решило эту проблему.
Я предполагаю, что проблема может заключаться в том, что сначала, когда TextField пуст, у него есть красные границы, под TextField есть текст и т. д., а затем он меняется, что может привести к большему количеству рекомпозиций, чем необходимо, но я не могу обнаружить проблему .
Кроме того, я могу открыть клавиатуру только один раз. Если я попытаюсь открыть его дважды, это не сработает.

