Переменная не обновляется из потока viewModelAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Переменная не обновляется из потока viewModel

Сообщение Anonymous »

Может кто-нибудь сказать мне, почему значение otp не обновляется с помощью resetText?
Шаги:
  • введите текст в TextField
  • нажмите «Сбросить текст»
Это ошибка или какие-то проблемы с моим кодом?
Модель просмотра

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

@HiltViewModel
class MyViewModel @Inject constructor() : ViewModel() {
val state = MutableStateFlow(SomeState())

fun resetText() {
state.update { it.copy(text = null) }
}

fun changeText() {
state.update { it.copy(text = Math.random().toString()) }
}
}
Класс состояния

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

data class SomeState(
val text: String? = null,
)
Просмотр

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

@Composable
fun SomeView(modifier: Modifier = Modifier) {
val viewModel = hiltViewModel()
val state by viewModel.state.collectAsState()
var otp by rememberSaveable(state.text) { mutableStateOf(state.text) }
Column(
modifier = modifier
.padding(horizontal = 16.dp)
.background(Color.White)
.fillMaxSize(),
verticalArrangement = Arrangement.SpaceEvenly,
horizontalAlignment = Alignment.CenterHorizontally,
) {
TextField(
value = otp.orEmpty(),
onValueChange = { otp = it }
)
Button(onClick = { viewModel.resetText() }) {
Text(text = "reset text")
}
Button(onClick = { viewModel.changeText() }) {
Text(text = "Change text")
}
}
}
P.S. Я заставил это работать, изменив resetText на

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

fun resetText() {
viewModelScope.launch {
state.update { it.copy(text = "") }
delay(100)
state.update { it.copy(text = null) }
}
}
Но это явно плохой вариант.

Подробнее здесь: https://stackoverflow.com/questions/786 ... model-flow
Ответить

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

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

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

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

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