簡體   English   中英

如何在 flow.stateIn() 之后從流中的另一個函數發出發射?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM