5.1

使用 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 按钮如何自动停用。

posted @ 2024-06-19 22:27  混沌武士丞  阅读(2)  评论(0编辑  收藏  举报