Jetpack Compose, как избежать двойного вызова текстового поля при изменении значения?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Jetpack Compose, как избежать двойного вызова текстового поля при изменении значения?

Сообщение Anonymous »

Я пытаюсь создать простое представление входа в систему, которое имеет ViewModel и SateUI с помощью Jetpack Compose.
Я достиг этого Экран из навигационного графа startdestination «LoginScreen». Это делается для того, чтобы уточнить, что MainActivity просто содержит ссылку на навигацию и самостоятельно выполняет навигацию из навигационного хоста.
ViewModel:

Код: Выделить всё

private val _uiState = MutableStateFlow(LoginStateUI())
val uiState: StateFlow = _uiState.asStateFlow()

fun updateState (value:String,prop:String){
_uiState.update {
when(prop){
"email" -> it.user.email = value
"password" -> it.user.password = value
}
it
}
}
Экран (части):

Код: Выделить всё

val viewModel = viewModel(modelClass = LoginViewModel::class.java)
val uiState by viewModel.uiState.collectAsState()
Column() {
OutlinedTextField(value = uiState.user.email, onValueChange = {
(viewModel::updateState)(it, "email")
}, placeholder = {
Text(stringResource(id = R.string.userLabel))
}
)
...
OutlinedTextField(value = uiState.user.password, onValueChange ={
viewModel.updateState(it, "password")
},placeholder= {
Text(stringResource(id = R.string.passwordLabel))
},
visualTransformation = PasswordVisualTransformation()
)
...
}
Но проблема в том, что всякий раз, когда я пытаюсь ввести данные, я вижу, что первый ввод становится правильным:
Изображение

но сразу же появляется второй входящий триггер изменения с пустой строкой на нем:
Изображение

Не знаю, что еще я делаю не так. :(
Я занимаюсь отладкой в ​​Pixer 8 Pro, нацелен на Android 28

Подробнее здесь: https://stackoverflow.com/questions/788 ... lled-twice
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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