So I have a marketplace list similar to the code snippet attached. We have a list of marketplace items in the viewmodel being observed as our state. We break down each marketplace item into a lazyitem (side question, does this improve performance, over, say a column, batching all the composables together into one?).
The question I have is a way to map the actual index of each lazy item to the percieved item index, ideally without providing the lazylist state to each composable child (for reusability and/or performance). In the following example, if I were to have two marketplace items in my list, the second without any mediaData, the map should have the following:
0 -> 0
1 -> 0
2 -> 0
3 -> 0
4 -> 1
5 -> 1
6 -> 1
// this is the state value I want to fill as the lazycolumn gets built
var perceivedIndexMapper by remember { mutableStateOf(mapOf<Int, Int>()) }
var listState = rememberLazyListState()
val marketplaceItems by viewModel.items.collectAsState() // List items flow
LazyColumn(
state = listState
) {
marketplaceItems.forEachIndexed { marketplaceItem, index ->
item {
Header(marketplaceItem.headerData, index)
}
item {
Body(marketplaceItem.bodyData, index)
}
// Some marketplace items don't have media
marketplaceItem.mediaData?.let {
item {
Media(marketplaceItem.mediaData, index)
}
}
item {
Footer(marketplaceItem.footerData, index)
}
}
}