即使 kotlin android 中的值没有更改,也会触发组合 stateFlows

Combining stateFlows is getting triggered even though value is not changed in kotlin android

提问人:Ujjwal Kumar Maharana 提问时间:11/2/2023 更新时间:11/2/2023 访问量:48

问:

private val _searchQuery = MutableStateFlow("")
val searchQuery = _searchQuery.asStateFlow()

private val _activeSort = MutableStateFlow(HomeScreenSortOptions.MOST_RELEVANT)
val activeSort = _activeSort.asStateFlow()

@OptIn(FlowPreview::class, ExperimentalCoroutinesApi::class)
val homeScreenItemsPager =
    combine(
        searchQuery.debounce(SEARCH_QUERY_DEBOUNCE_TIME).distinctUntilChanged(),
        activeSort
    ) { query, sort ->
        query to sort
    }.flatMapLatest {
        Pager(
            config = PagingConfig(
                pageSize = HOME_SCREEN_PAGE_SIZE,
                prefetchDistance = HOME_SCREEN_PAGE_SIZE
            )
        ) {
            HomeScreenItemSource(
                query = searchQuery.value,
                sort = activeSort.value.value,
                homeRepository = homeRepository
            )
        }.flow.cachedIn(scope = viewModelScope)
    }

在这里,我使用分页来显示列表。但是当我转到任何项目的详细信息页面并再次返回列表页面时,即使没有任何值更改并且整个列表再次刷新,stateFlow 也会重新触发。
我什至也松开了最后一个滚动的位置。 我该如何解决这个问题
combine

android-jetpack-compose kotlin-flow android-paging-3 kotlin-flow-flatmaplatest

评论

1赞 Jan Bína 11/2/2023
尝试将 移动到链的末尾,在cachedInflatMapLatest
0赞 Ujjwal Kumar Maharana 11/4/2023
谢谢@JanBína。最后移动cachedIn解决了这个问题

答: 暂无答案