LazyRow中的LazyColumn每次调用recompose



嗨,我有一个对象与其他对象的列表。我需要显示第一个对象的列表,并在每个对象中显示与其他对象的水平列表。

我将这些对象按房间存储在本地数据库中。这些对象与一个交叉ref:

相关。
data class ObjectWithOtherObjectsCrossRef(
@ColumnInfo(name = "object_id")
val objectId: Long,
@ColumnInfo(name = "other_object_id")
val otherObjectId: Long,
)

在lazyColumn中有一个lazyRow。lazyColumn由一个房间流填充。当我第一次进入屏幕时,视图正常工作,但是当我插入一个新项目时,每次都调用recompose,并且滚动变得很慢。

知道为什么recompose每次都调用吗?谢谢!

下面是我的代码: DataModel:

data class MyObject(
val id: Long,
val name: String,
val list: List<OtherObject>
)
data class OtherObject(
val id: Long,
val name: String
)

UiState:

sealed class MyObjectState {
object Loading: MyObjectState()
data class Success(val data: List<MyObject>): MyObjectState()
}

ViewModel:

val uiState: StateFlow<MyObjectState> = getAllObjects().stateIn(
scope = viewModelScope,
started = SharingStarted.WhileSubscribed(5_000),
initialValue = MyObjectState.Loading
)
fun addNewObject(object: Long, otherObject: Long) {
viewModelScope.launch {
addNewObjectUseCase(object, otherObject)
}
}

可组合

@Composable
fun MainView() {
val state: MyObjectState by viewModel.uiState.collectAsState()
when (state) {
MyObjectState.Loading -> {...}
is MyObjectState.Success -> ListScreen(state.data)
}

@Composable
fun ListScreen(
val list: List<MyObject>
) {
LazyColumn {
items(
items = list,
key = { it.id }
) { 
Text(text = it.name)
LazyRow {
items(
items = it.list,
key = { it.id },
) { 
Text(text = it.name)
}
}
}
}
}

我尝试将compose版本降级到稳定版本(1.1.1),它工作得很好。

我使用的版本是1.2.0.beta02

最新更新