使用 Room 更新实体
在最后这个任务中,您将添加最后几段代码以实现更新功能。您将在 ViewModel 中定义必要的函数,并在 ItemEditScreen 中使用这些函数。
又到编写代码的时候了!
在 ItemEditViewModel 类中,添加一个名为 updateUiState() 的函数,该函数接受 ItemUiState 对象且不返回任何内容。此函数会使用用户输入的新值更新 itemUiState。
fun updateUiState(itemDetails: ItemDetails) {
itemUiState =
ItemUiState(itemDetails = itemDetails, isEntryValid = validateInput(itemDetails))
}
在此函数中,您要将传入的 itemDetails 分配给 itemUiState 并更新 isEntryValid 值。如果 itemDetails 为 true,应用会启用 Save 按钮。只有在用户输入的内容有效时,您才将此值设置为 true。
转到 ItemEditScreen.kt 文件。
在 ItemEditScreen 可组合项中,向下滚动到 ItemEntryBody() 函数调用。
将 onItemValueChange 参数值设为新函数 updateUiState。
ItemEntryBody(
itemUiState = viewModel.itemUiState,
onItemValueChange = viewModel::updateUiState,
onSaveClick = { },
modifier = modifier.padding(innerPadding)
)
运行应用。
转到 Edit Item 界面。
将其中一个实体值留空,使其无效。请注意 Save 按钮如何自动停用。