我怎么知道可以导航“LazyColumn”?

How do I know a `LazyColumn` can be navigated?

我怎么知道 LazyColumn 可以导航?

例如,一个列表包含100个元素,那么它是一个可以滚动的惰性列,我们显示一个fab按钮向上滚动,但是当这个列表包含5个元素时,惰性列不可滚动并且FabButton 不再需要。

惰性列表布局信息可以从state获取,传递给LazyColumn

在我的示例中,我使用 derivedStateOf 来防止冗余重组 - 这只会在值实际更改时导致重组。在没有 derivedStateOfside effect 函数的情况下读取 LazyColumn 状态信息会导致严重的性能问题。

这种情况下最基本的逻辑是检查第一个元素是否已经滚动:

val canScrollToTop by remember {
    derivedStateOf {
        state.layoutInfo.visibleItemsInfo.run {
            isNotEmpty() && (first().index > 0 || first().offset < 0)
        }
    }
}
LazyColumn(state = state) {
   // ...
}
if (canScrollToTop) {
    // your button
}