將新專案添加到房間資料庫后,串列不會自動更新,僅當應用程式重新啟動時串列才會更新。我使用了 MutableState 和 Flow,但問題仍然存在。
貓庫:
class CatsRepository @Inject constructor(
private val catsRemoteDataSource: CatsRemoteDataSource,
private val favouritesDao: FavouritesDao
) : BaseApiResponse() {
suspend fun getAllFavourite(): Flow<List<FavouriteEntity>>{
return flow {
emit(favouritesDao.getAllFavourite())
}.flowOn(Dispatchers.IO)
}
}
貓視圖模型:
@HiltViewModel
class FavouriteViewModel @Inject constructor(private val repository: CatsRepository) :
ViewModel() {
init {
getAllFavourite()
}
val response: MutableState<List<FavouriteEntity>> = mutableStateOf(listOf())
private fun getAllFavourite() {
viewModelScope.launch {
repository.getAllFavourite().collect { values ->
Log.i("tag","item changed")
response.value = values
}
}
}
}
最愛道:
@Query("SELECT * FROM Favourites")
suspend fun getAllFavourite(): List<FavouriteEntity>
最喜歡的畫面:
@Composable
fun FavouriteScreen(favouriteViewModel: FavouriteViewModel,navController: NavController) {
val favourites = favouriteViewModel.response.value
FavouriteList(modifier = Modifier, favourites = favourites, navController = navController)
}
uj5u.com熱心網友回復:
您需要讓您的 dao 回傳實時資料或流,以便自動從中獲取更新
更新您FavouritesDao
的如下:
@Query("SELECT * FROM Favourites")
suspend fun getAllFavourite(): Flow<List<FavouriteEntity>>
并按如下方式更新您的存盤庫CatsRepository
:
class CatsRepository @Inject constructor(
private val catsRemoteDataSource: CatsRemoteDataSource,
private val favouritesDao: FavouritesDao
) : BaseApiResponse() {
suspend fun getAllFavourite(): Flow<List<FavouriteEntity>>{
return favouritesDao.getAllFavourite();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/506884.html
標籤:安卓 安卓工作室 科特林 机器人房间 android-jetpack-compose
下一篇:狀態更改后反應組件不重新渲染