[英]How to make an emit from another function in a flow after flow.stateIn()?
我從數據庫中獲取頁面數據,我有一個返回流的存儲庫。
class RepositoryImpl (private val db: AppDatabase) : Repository {
override fun fetchData (page: Int) = flow {
emit(db.getData(page))
}
}
在ViewModel中,我調用了stateIn(),第一頁到了,那么如何請求第二頁呢? 通過調用 fetchData(page = 2) 我得到一個新流,我需要數據到達舊流。
class ViewModel(private val repository: Repository) : ViewModel() {
val dataFlow = repository.fetchData(page = 1).stateIn(viewModelScope, WhileSubscribed())
}
如何獲取數據流中的第二頁?
如果您只發出一個值,我看不出在存儲庫中使用流的原因。 我會將其更改為suspend
函數,並在ViewModel
中使用新值更新MutableStateFlow
類型的變量。 示例代碼可能如下所示:
class RepositoryImpl (private val db: AppDatabase) : Repository {
override suspend fun fetchData (page: Int): List<Data> {
return db.getData(page)
}
}
class ViewModel(private val repository: Repository) : ViewModel() {
val _dataFlow = MutableStateFlow<List<Data>>(emptyList())
val dataFlow = _dataFlow.asStateFlow()
fun fetchData (page: Int): List<Data> {
viewModelScope.launch {
_dataFlow.value = repository.fetchData(page)
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.