我有一个带有数据类的视图模型
@HiltViewModel
class MetricUnitViewModel @Inject constructor(): ViewModel() {
val state = MutableStateFlow(SettingsState())
fun onItemChecked(settingItem: SettingItemAction.Checkable.CheckableItem) {
val newList = state.value.settingItems.map { item ->
item.isChecked = item == settingItem
item
}
state.value = state.value.copy(settingItems = newList)
}
data class SettingsState(
val settingItems: List<SettingItemAction.Checkable.CheckableItem> = emptyList()
)
}
和屏幕
@Composable
fun MetricUnitScreen(
viewModel: MetricUnitViewModel = hiltViewModel(),
settingsData: SettingsData,
onItemChecked: (SettingItemAction.Checkable.CheckableItem) -> Unit,
onBackClicked: () -> Unit = {},
) {
val state by viewModel.state.collectAsState()
state.settingItems.forEachIndexed { index, item ->
MetricUnitItemView(
viewModel = viewModel,
item = item,
isLast = index == state.settingItems.lastIndex
) {
onItemChecked(it)
}
}
但看起来是onItemChecked()
,调用state.value = state.value.copy(settingItems = newList)
对@Composable Screen没有任何影响.它完全被忽略,即使在视图模型端我可以看到修改的列表