5.5
- 在
ItemDetailsScreen.kt中,滚动到ItemDetailsScreen可组合项。 - 在
FloatingActionButton()中,将onClick参数更改为包含uiState.value.itemDetails.id,它是所选实体的id。您可以使用此id检索实体详详情。
FloatingActionButton(
onClick = { navigateToEditItem(uiState.value.itemDetails.id) },
modifier = /*...*/
)
- 在
ItemEditViewModel类中,添加init代码块。
init {
}
- 在
init代码块内,使用viewModelScope.launch启动协程。
import kotlinx.coroutines.launch
viewModelScope.launch { }
- 在
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。
- 将构造函数参数添加到
ItemEditViewModel类。
class ItemEditViewModel(
savedStateHandle: SavedStateHandle,
private val itemsRepository: ItemsRepository
)
- 在
AppViewModelProvider.kt文件的ItemEditViewModel初始化程序中,将ItemsRepository对象添加为参数。
initializer {
ItemEditViewModel(
this.createSavedStateHandle(),
inventoryApplication().container.itemsRepository
)
}
- 运行应用。
- 前往 Item Details,然后点按
FAB。 - 请注意,这些字段会填充商品详情。
- 修改库存数量或任何其他字段,然后点按 Save 按钮。
毫无反应!这是因为您没有更新应用数据库中的实体。您将在下一部分中修复此问题。
FAB。
浙公网安备 33010602011771号