如何在flow. statein()之后的流中从另一个函数发出?



我从数据库中获取页面数据,我有一个返回流的存储库。

class RepositoryImpl (private val db: AppDatabase) : Repository {
override fun fetchData (page: Int) = flow {
emit(db.getData(page))
}
}

在ViewModel中,我调用statin(),第一个页面到达,但是如何请求第二个页面呢?通过调用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) 
}
}    
}

相关内容

  • 没有找到相关文章

最新更新