项目在滚动列表期间重组

Items recompose during scrolling list

在我的屏幕上有 MyTopItem() 和下面的项目列表。 当我开始滚动列表时,我想隐藏 MyTopItem().

它工作正常,但滚动太慢了。 发生这种情况是因为在滚动 MyLazyVerticalGridItemsSection() 中的所有项目时都会重新组合。

如何避免在滚动过程中重组?

Column(Modifier.fillMaxSize()) {
    val listState = rememberLazyListState()

    AnimatedVisibility(
        visible = listState.firstVisibleItemScrollOffset < 1,
        enter = expandVertically(),
        exit = shrinkVertically()
    ) {
        MyTopItem()
    }
    MyLazyVerticalGridItemsSection(
        items = myItems,
        listState = listState
    )
}

发生这种情况是因为您直接使用 listState.firstVisibleItemScrollOffset,因此每次此值更改时都会触发重组。

在这种情况下应该使用 derivedStateOf - 它只会在计算结果发生变化时触发重组::

val visible by derivedStateOf { listState.firstVisibleItemScrollOffset < 1 }