From bec04df6cfa97006dd05d3028ff08d0b68934590 Mon Sep 17 00:00:00 2001 From: Chiang-Nan Lin Date: Thu, 4 Jul 2024 23:34:53 +0200 Subject: [PATCH] Fix: scrolling button not scroll to first/last item --- .../de/berlindroid/zeapp/zeui/ZeFloatingScroller.kt | 13 ++++--------- .../de/berlindroid/zeapp/zeui/ZeNavigationPad.kt | 13 +++++++------ 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/zeapp/android/src/main/java/de/berlindroid/zeapp/zeui/ZeFloatingScroller.kt b/zeapp/android/src/main/java/de/berlindroid/zeapp/zeui/ZeFloatingScroller.kt index 25df397f..58708870 100644 --- a/zeapp/android/src/main/java/de/berlindroid/zeapp/zeui/ZeFloatingScroller.kt +++ b/zeapp/android/src/main/java/de/berlindroid/zeapp/zeui/ZeFloatingScroller.kt @@ -19,25 +19,20 @@ import androidx.compose.material3.Text as ZeText @Composable fun ZeFloatingScroller( - coroutineScope: CoroutineScope, - lazyListState: LazyListState, - scrollLength: Float, + modifier: Modifier = Modifier, text: String, + onClick: () -> Unit, ) { FloatingActionButton( containerColor = ZeBlack, - modifier = Modifier + modifier = modifier .padding(16.dp) .border( width = 1.dp, color = ZeWhite, shape = RoundedCornerShape(16.dp), ), - onClick = { - coroutineScope.launch { - lazyListState.animateScrollBy(scrollLength) - } - }, + onClick = onClick, ) { ZeText( text = text, diff --git a/zeapp/android/src/main/java/de/berlindroid/zeapp/zeui/ZeNavigationPad.kt b/zeapp/android/src/main/java/de/berlindroid/zeapp/zeui/ZeNavigationPad.kt index 7dc8a6a2..d84dcbc7 100644 --- a/zeapp/android/src/main/java/de/berlindroid/zeapp/zeui/ZeNavigationPad.kt +++ b/zeapp/android/src/main/java/de/berlindroid/zeapp/zeui/ZeNavigationPad.kt @@ -1,10 +1,8 @@ package de.berlindroid.zeapp.zeui import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyListState import androidx.compose.runtime.Composable import androidx.compose.runtime.derivedStateOf @@ -14,13 +12,13 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp +import kotlinx.coroutines.launch @Composable fun ZeNavigationPad( lazyListState: LazyListState, ) { val coroutineScope = rememberCoroutineScope() - val scrollLength = 425f val topReached by remember { derivedStateOf { lazyListState.layoutInfo.visibleItemsInfo.firstOrNull()?.offset == 0 } } val bottomReached by remember { derivedStateOf { @@ -36,11 +34,14 @@ fun ZeNavigationPad( horizontalAlignment = Alignment.End, ) { if (!topReached) { - ZeFloatingScroller(coroutineScope, lazyListState, -scrollLength, "↑") + ZeFloatingScroller(text = "↑") { + coroutineScope.launch { lazyListState.animateScrollToItem(0) } + } } - Spacer(modifier = Modifier.size(10.dp)) if (!bottomReached) { - ZeFloatingScroller(coroutineScope, lazyListState, scrollLength, "↓") + ZeFloatingScroller(text = "↓") { + coroutineScope.launch { lazyListState.animateScrollToItem(lazyListState.layoutInfo.totalItemsCount - 1) } + } } } }