From 9180603ead1b48326ed9294f134d3a265dc597a0 Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Tue, 6 Aug 2024 19:33:21 +0800 Subject: [PATCH] Fix a division by zero error in ScrollbarAdapter --- .../foundation/scrollbar/ScrollbarAdapter.kt | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/app/src/main/kotlin/androidx/compose/foundation/scrollbar/ScrollbarAdapter.kt b/app/src/main/kotlin/androidx/compose/foundation/scrollbar/ScrollbarAdapter.kt index 9f8482da9..d3464e729 100644 --- a/app/src/main/kotlin/androidx/compose/foundation/scrollbar/ScrollbarAdapter.kt +++ b/app/src/main/kotlin/androidx/compose/foundation/scrollbar/ScrollbarAdapter.kt @@ -365,25 +365,23 @@ internal class LazyGridScrollbarAdapter( } override fun averageVisibleLineSize(): Double { - val visibleItemsInfo = scrollState.layoutInfo.visibleItemsInfo - val indexOfFirstKnownLineItem = visibleItemsInfo.indexOfFirst { it.line() != unknownLine } - if (indexOfFirstKnownLineItem == -1) { + val visibleItemsInfo = // Non-exiting visible items + scrollState.layoutInfo.visibleItemsInfo.filter { it.line() != unknownLine } + if (visibleItemsInfo.isEmpty()) { return 0.0 } - val reallyVisibleItemsInfo = // Non-exiting visible items - visibleItemsInfo.subList(indexOfFirstKnownLineItem, visibleItemsInfo.size) // Compute the size of the last line - val lastLine = reallyVisibleItemsInfo.last().line() - val lastLineSize = reallyVisibleItemsInfo + val last = visibleItemsInfo.last() + val lastLine = last.line() + val lastLineSize = visibleItemsInfo .asReversed() .asSequence() .takeWhile { it.line() == lastLine } .maxOf { it.mainAxisSize() } - val first = reallyVisibleItemsInfo.first() - val last = reallyVisibleItemsInfo.last() - val lineCount = last.line() - first.line() + 1 + val first = visibleItemsInfo.first() + val lineCount = lastLine - first.line() + 1 val lineSpacingSum = (lineCount - 1) * lineSpacing return ( last.mainAxisOffset() + lastLineSize - first.mainAxisOffset() - lineSpacingSum