5.8


  • 为删除 DAO 查询添加测试。
  • 在 ItemDetailsViewModel 类中添加一个函数来删除数据库中的实体。
  • 更新 ItemDetailsBody 可组合项。

添加 DAO 测试

  1. 在 ItemDaoTest.kt 中,添加一个名为 daoDeleteItems_deletesAllItemsFromDB() 的测试。
 
@Test
@Throws(Exception::class)
fun daoDeleteItems_deletesAllItemsFromDB()
  1. 使用 runBlocking {} 启动协程。
 
fun daoDeleteItems_deletesAllItemsFromDB() = runBlocking {
}
  1. 向数据库添加两个商品,并对这两个商品调用 itemDao.delete(),以将其从数据库中删除。
 
addTwoItemsToDb()
itemDao.delete(item1)
itemDao.delete(item2)
  1. 从数据库中检索实体,并检查列表是否为空。完成后的测试应如下所示:
 
import org.junit.Assert.assertTrue

@Test
@Throws(Exception::class)
fun daoDeleteItems_deletesAllItemsFromDB() = runBlocking {
    addTwoItemsToDb()
    itemDao.delete(item1)
    itemDao.delete(item2)
    val allItems = itemDao.getAllItems().first()
    assertTrue(allItems.isEmpty())
}

在 ItemDetailsViewModel 中添加删除函数

  1. 在 ItemDetailsViewModel 中,添加一个名为 deleteItem() 的新函数,该函数不带参数也不返回任何内容。
  2. 在 deleteItem() 函数内,添加一个 itemsRepository.deleteItem() 函数调用并传入 uiState.value.toItem()
 
suspend fun deleteItem() {
    itemsRepository.deleteItem(uiState.value.itemDetails.toItem())
}

在此函数中,您将使用 toItem() 扩展函数将 uiState 从 itemDetails 类型转换为 Item 实体类型。

  1. 在 ui/item/ItemDetailsScreen 可组合项中,添加一个名为 coroutineScope 的 val,并将其设置为 rememberCoroutineScope()。此方法会返回一个协程作用域,该作用域会绑定到调用所在的组件(ItemDetailsScreen 可组合项)。
 
import androidx.compose.runtime.rememberCoroutineScope

val coroutineScope = rememberCoroutineScope()
  1. 滚动到 ItemDetailsBody() 函数。
  2. 在 onDelete lambda 内使用 coroutineScope 启动协程。
  3. 在 launch 代码块内,对 viewModel 调用 deleteItem() 方法。
 
import kotlinx.coroutines.launch

ItemDetailsBody(
    itemUiState = uiState.value,
    onSellItem = { viewModel.reduceQuantityByOne() },
    onDelete = {
        coroutineScope.launch {
           viewModel.deleteItem()
    }
    modifier = modifier.padding(innerPadding)
)
  1. 删除商品后,返回到“Inventory”界面。
  2. 在 deleteItem() 函数调用后调用 navigateBack()
 
onDelete = {
    coroutineScope.launch {
        viewModel.deleteItem()
        navigateBack()
    }
posted @ 2024-06-19 22:23  混沌武士丞  阅读(6)  评论(0编辑  收藏  举报