我正在从firebase组成一个懒惰的项目行。我想有一个按钮的地方类型过滤行(eidogg.,商店,餐馆等)工作正常。由于它们都是完全相同的屏幕,我只是用所选的类别为它调用可组合的,然后,我希望能够选择一个新按钮来进一步过滤,但由于某种原因,组合工具陷入了循环。
fun LocationScreen(
modifier: Modifier = Modifier,
viewModel: HomeViewModel = hiltViewModel(),
useCategoryTag: CategoryTags? = null,
onLocationClick: (String) -> Unit,
onBackClick: () -> Unit = {}
) {
val locations = viewModel.getCategoryLocations(useCategoryTag).value.collectAsStateWithLifecycle(emptyList())
...
在我的视图模型中
var locations: MutableState<Flow<List<Location>>> =
mutableStateOf(emptyFlow())
...
...
...
fun getCategoryLocations(tag: CategoryTags?): MutableState<Flow<List<Location>>> {
if (tag == null) {
Log.i("getCategoryLocations","null")
locations.value = firestoreRepository.locations
} else {
Log.i("getCategoryLocations","not null")
locations.value = firestoreRepository.getLocationCategory(tag, locationTags.toList())
}
return locations
}
我的数据访问(过滤只是一个测试值ATM)
override fun getLocationCategory(
tag: CategoryTags,
filters: List<LocationTags>
): Flow<List<Location>> {
return firestore.collection(LOCATIONS_COLLECTION)
.whereEqualTo("category", tag.toString())
.snapshots()
.map { snapshot ->
snapshot.toObjects<Location>()
.filter { location -> location.top_tags[0] == "Few People" }
}
}
当一个按钮被点击的时候,点击触发就像这样,if null检查看起来工作得很好(它只是导航)
onClick = {
if (useCategoryTag == null) {
viewModel.onCategoryClick(item as CategoryTags, onLocationClick)
} else {
viewModel.getCategoryLocations(useCategoryTag)
}
}
Log就是这样做的:
2023-03-21 20:47:24.876 13143-13143 getCategoryLocations com.app.senseaid I not null
2023-03-21 20:47:24.893 13143-13143 getCategoryLocations com.app.senseaid I not null
2023-03-21 20:47:24.917 13143-13143 getCategoryLocations com.app.senseaid I not null
2023-03-21 20:47:24.948 13143-13143 getCategoryLocations com.app.senseaid I not null
2023-03-21 20:47:24.978 13143-13143 getCategoryLocations com.app.senseaid I not null
2023-03-21 20:47:24.997 13143-13143 getCategoryLocations com.app.senseaid I not null
2023-03-21 20:47:25.028 13143-13143 getCategoryLocations com.app.senseaid I not null
2023-03-21 20:47:25.044 13143-13143 getCategoryLocations com.app.senseaid I not null
2023-03-21 20:47:25.060 13143-13143 getCategoryLocations com.app.senseaid I not null
已尝试使用if语句检查是否应重新组合,但没有任何进展
编辑:现在也在循环初始构图
1条答案
按热度按时间qyyhg6bp1#
这里有几个问题,但本质上您使用的状态和流是错误的。
试试这个:
在ViewModel中:
在“可合成”屏幕中: