4.30

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

val coroutineScope = rememberCoroutineScope()
  1. 在 ItemEntryBody() 函数调用中,更新 onSaveClick 函数参数以在 coroutineScope 中启动协程。
  2. 在 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)
)
posted @ 2024-06-19 22:28  混沌武士丞  阅读(1)  评论(0编辑  收藏  举报