5.5

  1. 在 ItemDetailsScreen.kt 中,滚动到 ItemDetailsScreen 可组合项。
  2. 在 FloatingActionButton() 中,将 onClick 参数更改为包含 uiState.value.itemDetails.id,它是所选实体的 id。您可以使用此 id 检索实体详详情。
 
FloatingActionButton(
    onClick = { navigateToEditItem(uiState.value.itemDetails.id) },
    modifier = /*...*/
)
  1. 在 ItemEditViewModel 类中,添加 init 代码块。
 
init {

}
  1. 在 init 代码块内,使用 viewModelScope.launch 启动协程。
 
import kotlinx.coroutines.launch

viewModelScope.launch { }
  1. 在 launch 代码块内,使用 itemsRepository.getItemStream(itemId) 检索实体详情。
 
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.first

init {
    viewModelScope.launch {
        itemUiState = itemsRepository.getItemStream(itemId)
            .filterNotNull()
            .first()
            .toItemUiState(true)
    }
}

在此发布块中,您添加一个过滤条件,以返回仅包含非 null 值的数据流。借助 toItemUiState(),您可以将 item 实体转换为 ItemUiState。将 actionEnabled 值作为 true 传递,以启用 Save 按钮。

如需解决 Unresolved reference: itemsRepository 错误,您需要将 ItemsRepository 作为依赖项传入 ViewModel。

  1. 将构造函数参数添加到 ItemEditViewModel 类。
 
class ItemEditViewModel(
    savedStateHandle: SavedStateHandle,
    private val itemsRepository: ItemsRepository
)
  1. 在 AppViewModelProvider.kt 文件的 ItemEditViewModel 初始化程序中,将 ItemsRepository 对象添加为参数。
 
initializer {
    ItemEditViewModel(
        this.createSavedStateHandle(),
        inventoryApplication().container.itemsRepository
    )
}
  1. 运行应用。
  2. 前往 Item Details,然后点按 73b88f16638608f0.png FAB。
  3. 请注意,这些字段会填充商品详情。
  4. 修改库存数量或任何其他字段,然后点按 Save 按钮。

毫无反应!这是因为您没有更新应用数据库中的实体。您将在下一部分中修复此问题。

posted @ 2024-05-05 23:14  混沌武士丞  阅读(52)  评论(0)    收藏  举报