Add LazyListState::smoothScrollToTop extension function
This commit is contained in:
@@ -9,7 +9,6 @@ import androidx.compose.foundation.layout.Box
|
|||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.size
|
import androidx.compose.foundation.layout.size
|
||||||
import androidx.compose.foundation.lazy.LazyListState
|
import androidx.compose.foundation.lazy.LazyListState
|
||||||
import androidx.compose.foundation.lazy.grid.LazyGridState
|
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.derivedStateOf
|
import androidx.compose.runtime.derivedStateOf
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
@@ -24,6 +23,7 @@ import androidx.compose.ui.unit.dp
|
|||||||
import it.vfsfitvnm.vimusic.LocalPlayerAwarePaddingValues
|
import it.vfsfitvnm.vimusic.LocalPlayerAwarePaddingValues
|
||||||
import it.vfsfitvnm.vimusic.R
|
import it.vfsfitvnm.vimusic.R
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||||
|
import it.vfsfitvnm.vimusic.utils.smoothScrollToTop
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@@ -39,25 +39,7 @@ fun ScrollToTop(
|
|||||||
|
|
||||||
ScrollToTop(
|
ScrollToTop(
|
||||||
isVisible = showScrollTopButton,
|
isVisible = showScrollTopButton,
|
||||||
onClick = { lazyListState.animateScrollToItem(0) },
|
onClick = lazyListState::smoothScrollToTop,
|
||||||
modifier = modifier
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun ScrollToTop(
|
|
||||||
lazyGridState: LazyGridState,
|
|
||||||
modifier: Modifier = Modifier,
|
|
||||||
) {
|
|
||||||
val showScrollTopButton by remember {
|
|
||||||
derivedStateOf {
|
|
||||||
lazyGridState.firstVisibleItemIndex > lazyGridState.layoutInfo.visibleItemsInfo.size
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ScrollToTop(
|
|
||||||
isVisible = showScrollTopButton,
|
|
||||||
onClick = { lazyGridState.animateScrollToItem(0) },
|
|
||||||
modifier = modifier
|
modifier = modifier
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ import it.vfsfitvnm.vimusic.utils.rememberMediaItemIndex
|
|||||||
import it.vfsfitvnm.vimusic.utils.rememberShouldBePlaying
|
import it.vfsfitvnm.vimusic.utils.rememberShouldBePlaying
|
||||||
import it.vfsfitvnm.vimusic.utils.rememberWindows
|
import it.vfsfitvnm.vimusic.utils.rememberWindows
|
||||||
import it.vfsfitvnm.vimusic.utils.shuffleQueue
|
import it.vfsfitvnm.vimusic.utils.shuffleQueue
|
||||||
|
import it.vfsfitvnm.vimusic.utils.smoothScrollToTop
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
@ExperimentalFoundationApi
|
@ExperimentalFoundationApi
|
||||||
@@ -285,7 +286,7 @@ fun PlayerBottomSheet(
|
|||||||
.padding(end = 2.dp)
|
.padding(end = 2.dp)
|
||||||
.clickable {
|
.clickable {
|
||||||
reorderingState.coroutineScope.launch {
|
reorderingState.coroutineScope.launch {
|
||||||
reorderingState.lazyListState.animateScrollToItem(0)
|
reorderingState.lazyListState.smoothScrollToTop()
|
||||||
}.invokeOnCompletion {
|
}.invokeOnCompletion {
|
||||||
binder.player.shuffleQueue()
|
binder.player.shuffleQueue()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package it.vfsfitvnm.vimusic.utils
|
||||||
|
|
||||||
|
import androidx.compose.foundation.lazy.LazyListState
|
||||||
|
|
||||||
|
suspend fun LazyListState.smoothScrollToTop() {
|
||||||
|
if (firstVisibleItemIndex > layoutInfo.visibleItemsInfo.size) {
|
||||||
|
scrollToItem(layoutInfo.visibleItemsInfo.size)
|
||||||
|
}
|
||||||
|
animateScrollToItem(0)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user