JetPack Compose Stateflow не распространяется после обновления его значенияAndroid

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

Сообщение Anonymous »

Я свободно следую этой лаборатории навигации JetPack, чтобы попытаться научиться использовать навигацию в Compose, но с более простым потоком, и столкнулся с проблемой. У меня есть список объектов на первой странице. Когда я выбираю объект из списка, я обновляю UISTATE. Затем я перейду ко второму экрану, где я просто хочу поместить немного текста, показывающего, какой объект был выбран на первом экране, но вместо этого объект возвращается как NULL. < /P>
Вот главный экран : < /p>

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

val uiState by viewModel.uiState.collectAsState()

NavHost(
...
) {
composable(route = MainScreen.FirstScreen.name) {
FirstScreen(
viewModel,
onItemSelected = {
viewModel.setSelectedItem(it)
navController.navigate(MainScreen.SecondScreen.name)
}
)
}
composable(route = MainScreen.SecondScreen.name) {
println("selected item from state: ${uiState.selectedItem.id}") // THIS IS NULL
SecondScreen(
viewModel,
uiState.selectedItem
)
}
}
< /code>
viewmodel: < /p>
private val _uiState = MutableStateFlow(UIState())
val uiState: StateFlow = _uiState.asStateFlow()

fun setSelectedItem(item: Item) {
_uiState.update { currentState ->
currentState.copy(
selectedItem = item
)
}
println("update uiState with ${_uiState.value.selectedItem.id}") // THIS SHOWS THE CORRECT ID
}
< /code>
Объект элемента пока простая строка: < /p>
data class Item (
val id: String = ""
)
Поэтому, когда я нажимаю на элемент в списке, я вижу функцию SetSelectedItem , и оператор печати печатает правильное новое значение идентификатора из выбранного элемента. Когда я затем перейду ко второму экрану, я вижу в выбранном элементе журналов из состояния: , но нет значения для идентификатора (это означает, что это все еще пустая строка, которую он изначально был инициализирован).
Кажется, что Uistate не обновляется с моего основного экрана, где происходит навигация, но, похоже, это делает то же самое, что, похоже, лаборатория кода, о которой я говорю. Я что -то здесь упускаю?

Подробнее здесь: https://stackoverflow.com/questions/794 ... -its-value
Ответить

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

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

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

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

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