Kotlin Flow "there is more than one label with such a name in this scope" 收集

Kotlin Flow "there is more than one label with such a name in this scope" on collect

我有一个流程 collection 我想做一个条件,如果列表为空 return 因为没有进一步的工作要做。

我的问题是 Android 工作室向我抛出一条唠叨的消息

there is more than one label with such a name in this scope

我假设它很不高兴,因为我在收集中进行收集(请参阅下面的代码,希望它能理解我为什么这样做)。

有没有办法重新标记收藏,以便它知道我在说哪个,我没有看到上面有任何东西。

此外,我是流程的新手,所以如果我做错了,请告诉我正确的方法,因为这似乎有效,因为我需要一个流程来另一个流程。

viewModelScope.launch {
    companyDataStore.getFromDataStore()
        .catch { e ->
            _snackBar.value = e.message
        }.collect { company ->
            companyFeatures = company.features

            userClient.getGroupsByFeatures(companyFeatures)
                .catch { e ->
                    _snackBar.value = e.message
                }
            .collect { groupList ->
                if (groupList.data?.size == 0)
                {
                    return@collect
                }

                groups = groupList.data!!
                feedFilter.group = groups.firstOrNull()?.guid
            }
        }
}

您可以将标签添加到 collect 块并将它们与 return 语句一起使用:

.collect collectLabel2@ { 
            // ...
            return@collectLabel2
            
            // ...        
}

此处添加标签collectLabel2


要消除多个 collect 块,您可以尝试使用 flatMapMerge or flatMapLatest 函数:

viewModelScope.launch {
    companyDataStore.getFromDataStore()
        .catch { e ->
            _snackBar.value = e.message
        }
        .flatMapMerge { company ->
            companyFeatures = company.features

            userClient.getGroupsByFeatures(companyFeatures)
                .catch { e ->
                    _snackBar.value = e.message
                }
        }
        .collect { groupList ->
            if (groupList.data?.size != 0) {
                    groups = groupList.data!!
                    feedFilter.group = groups.firstOrNull()?.guid
            }   
        }
}