4.30
- 返回
ItemEditViewModel
类,添加一个名为updateItem()
的suspend
函数,该函数不接受任何参数。您可以使用此函数将更新后的实体保存到 Room 数据库。
suspend fun updateItem() {
}
- 在
getUpdatedItemEntry()
函数内,添加一个if
条件,通过使用函数validateInput()
来验证用户输入。 - 对
itemsRepository
调用updateItem()
函数,并传入itemUiState.itemDetails.
toItem
()
。实体必须为Item
类型,才能添加到 Room 数据库中。完成后的函数如下所示:
suspend fun updateItem() {
if (validateInput(itemUiState.itemDetails)) {
itemsRepository.updateItem(itemUiState.itemDetails.toItem())
}
}
- 返回到
ItemEditScreen
可组合项。您需要使用协程作用域来调用updateItem()
函数。创建一个名为coroutineScope
的变量并将其设置为rememberCoroutineScope()
。
import androidx.compose.runtime.rememberCoroutineScope
val coroutineScope = rememberCoroutineScope()
- 在
ItemEntryBody()
函数调用中,更新onSaveClick
函数参数以在coroutineScope
中启动协程。 - 在
launch
代码块内,对viewModel
调用updateItem()
,然后返回。
import kotlinx.coroutines.launch
onSaveClick = {
coroutineScope.launch {
viewModel.updateItem()
navigateBack()
}
},
完成后的 ItemEntryBody()
函数调用如下所示:
ItemEntryBody(
itemUiState = viewModel.itemUiState,
onItemValueChange = viewModel::updateUiState,
onSaveClick = {
coroutineScope.launch {
viewModel.updateItem()
navigateBack()
}
},
modifier = modifier.padding(innerPadding)
)