Код: Выделить всё
private val _mapState = MutableStateFlow(
mapOf(
"a" to listOf(1, 2, 3),
"b" to listOf(1),
"c" to listOf(1, 2)
)
)
val mapState: StateFlow = _mapState
fun sortMapByListSize() {
val sortedMap = _mapState.value.entries
.sortedBy { it.value.size }
.associateTo(LinkedHashMap()) { it.toPair() }
println("Sorted in ViewModel: $sortedMap") // ✅ This prints the sorted map
_mapState.value = sortedMap // ❌ UI does not update
}
< /code>
, затем в моем композитном, я собираю Stateflow, как это: < /p>
@Composable
fun MapScreen(viewModel: MyViewModel = viewModel()) {
val map by viewModel.mapState.collectAsState()
LaunchedEffect(map) {
println("Map inside LaunchedEffect: $map")
}
Column {
Button(onClick = { viewModel.sortMapByListSize() }) {
Text("Sort")
}
}
}
Несмотря на то, что println («сортирован в ViewModel») показывает, что карта сортируется правильно, Compose UI не обновляется, а запуск (MAP) не получает повторного запуска.
Я использовал LinkeDhashmap для refer orve. убедился, что карта правильно сортируется внутри ViewModel.
Я пытался использовать .tomap () , .associate , .associateto (linkedhashmap ()) и т. Д.>
Подробнее здесь: https://stackoverflow.com/questions/796 ... -new-value