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
}
}
}
我有一个流程 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
}
}
}