TextField 'OnValueChange' вызывается дважды без ввода каких-либо данных.Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 TextField 'OnValueChange' вызывается дважды без ввода каких-либо данных.

Сообщение Anonymous »

fun TextFieldWithIconsAndErrorLabel(
text: String,
charLimit: Int = Int.MAX_VALUE,
keyboardType: KeyboardType = KeyboardType.Text,
onValueChange: (String) -> Unit,
) {
val keyboardController = LocalSoftwareKeyboardController.current
var shouldShowMaxCharLimitError by remember { mutableStateOf(false) }

BasicTextField(
modifier = Modifier
.fillMaxWidth(),
value = text,
onValueChange = { newInput ->
if (newInput.length > charLimit) {
shouldShowMaxCharLimitError = true
} else {
shouldShowMaxCharLimitError = false
onValueChange(newInput)
}
},
keyboardOptions = KeyboardOptions(
imeAction = ImeAction.Done,
keyboardType = keyboardType,
),
singleLine = true,
keyboardActions = KeyboardActions(
onDone = {
keyboardController?.hide()
onValueChange(text)
shouldShowMaxCharLimitError = false
}
),
)
if (shouldShowMaxCharLimitError) {
Text(
modifier = Modifier
.fillMaxWidth(),
text = "Max character limit exceeded",
style = TextStyle(
fontFamily = PoppinsFamily,
fontWeight = FontWeight.Medium,
fontSize = 12.sp,
color = Color.Red,
textAlign = TextAlign.Start
),
)
}
}

В приведенном выше коде onValueChange вызывается несколько раз и немедленно сбрасывает логическое значение.
Для каждого ввода текста эта лямбда вызывается дважды.
onValueChange = { newInput ->
if (newInput.length > charLimit) {
shouldShowMaxCharLimitError = true
} else {
shouldShowMaxCharLimitError = false
onValueChange(newInput)
}
}


Подробнее здесь: https://stackoverflow.com/questions/782 ... -any-input
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»