在 FavouriteListViewModel 中增加 EventBus 监听,以便在动态取消收藏时刷新列表。
This commit is contained in:
@@ -15,10 +15,14 @@ import com.aiosman.ravenow.entity.MomentEntity
|
|||||||
import com.aiosman.ravenow.entity.MomentPagingSource
|
import com.aiosman.ravenow.entity.MomentPagingSource
|
||||||
import com.aiosman.ravenow.entity.MomentRemoteDataSource
|
import com.aiosman.ravenow.entity.MomentRemoteDataSource
|
||||||
import com.aiosman.ravenow.entity.MomentServiceImpl
|
import com.aiosman.ravenow.entity.MomentServiceImpl
|
||||||
|
import com.aiosman.ravenow.event.MomentFavouriteChangeEvent
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.asStateFlow
|
import kotlinx.coroutines.flow.asStateFlow
|
||||||
import kotlinx.coroutines.flow.collectLatest
|
import kotlinx.coroutines.flow.collectLatest
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
import org.greenrobot.eventbus.EventBus
|
||||||
|
import org.greenrobot.eventbus.Subscribe
|
||||||
|
import org.greenrobot.eventbus.ThreadMode
|
||||||
|
|
||||||
object FavouriteListViewModel:ViewModel() {
|
object FavouriteListViewModel:ViewModel() {
|
||||||
private val momentService: MomentService = MomentServiceImpl()
|
private val momentService: MomentService = MomentServiceImpl()
|
||||||
@@ -26,12 +30,15 @@ object FavouriteListViewModel:ViewModel() {
|
|||||||
MutableStateFlow<PagingData<MomentEntity>>(PagingData.empty())
|
MutableStateFlow<PagingData<MomentEntity>>(PagingData.empty())
|
||||||
val favouriteMomentsFlow = _favouriteMomentsFlow.asStateFlow()
|
val favouriteMomentsFlow = _favouriteMomentsFlow.asStateFlow()
|
||||||
var isLoading by mutableStateOf(false)
|
var isLoading by mutableStateOf(false)
|
||||||
|
|
||||||
|
init {
|
||||||
|
EventBus.getDefault().register(this)
|
||||||
|
}
|
||||||
fun refreshPager(force:Boolean = false) {
|
fun refreshPager(force:Boolean = false) {
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
if (force) {
|
if (force) {
|
||||||
isLoading = true
|
isLoading = true
|
||||||
}
|
}
|
||||||
isLoading = false
|
|
||||||
Pager(
|
Pager(
|
||||||
config = PagingConfig(pageSize = 20, enablePlaceholders = false),
|
config = PagingConfig(pageSize = 20, enablePlaceholders = false),
|
||||||
pagingSourceFactory = {
|
pagingSourceFactory = {
|
||||||
@@ -42,11 +49,22 @@ object FavouriteListViewModel:ViewModel() {
|
|||||||
}
|
}
|
||||||
).flow.cachedIn(viewModelScope).collectLatest {
|
).flow.cachedIn(viewModelScope).collectLatest {
|
||||||
_favouriteMomentsFlow.value = it
|
_favouriteMomentsFlow.value = it
|
||||||
|
isLoading = false
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||||
|
fun onMomentFavouriteChangeEvent(event: MomentFavouriteChangeEvent) {
|
||||||
|
if (!event.isFavourite) {
|
||||||
|
// 当取消收藏时,刷新列表以移除该项目
|
||||||
|
refreshPager(force = true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun ResetModel() {
|
fun ResetModel() {
|
||||||
isLoading = false
|
isLoading = false
|
||||||
|
EventBus.getDefault().unregister(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user