LazyRow внутри вызова LazyColumn перекомпоновывается каждый раз
Привет, у меня есть объект со списком других объектов. Мне нужно показать список первого, а внутри каждого объекта показать горизонтальный список с другими объектами.
У меня эти объекты хранятся в локальной базе данных по комнатам. Эти объекты связаны перекрестной ссылкой:
data class ObjectWithOtherObjectsCrossRef(
@ColumnInfo(name = "object_id")
val objectId: Long,
@ColumnInfo(name = "other_object_id")
val otherObjectId: Long,
)
У меня есть lazyRow внутри lazyColumn. LazyColumn заполняется комнатным потоком. В первый раз, когда я выхожу на экран, представление работает правильно, но когда я вставляю новый элемент, каждый раз вызывается перекомпоновка, и прокрутка замедляется.
Любая идея о том, почему recompose звонит каждый раз? Спасибо!
Вот мой код:
Модель данных:
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)
}
}
}
}
}
1 ответ
Я попытался понизить версию Compose до стабильной (1.1.1), и она отлично работает.
Я использовал версию 1.2.0.beta02.