diff --git a/AdvancedStateAndSideEffectsCodelab/app/src/main/java/androidx/compose/samples/crane/base/ExploreSection.kt b/AdvancedStateAndSideEffectsCodelab/app/src/main/java/androidx/compose/samples/crane/base/ExploreSection.kt index 578ba76..ca53273 100644 --- a/AdvancedStateAndSideEffectsCodelab/app/src/main/java/androidx/compose/samples/crane/base/ExploreSection.kt +++ b/AdvancedStateAndSideEffectsCodelab/app/src/main/java/androidx/compose/samples/crane/base/ExploreSection.kt @@ -18,25 +18,14 @@ package androidx.compose.samples.crane.base import androidx.compose.foundation.Image import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.* import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.Divider -import androidx.compose.material.MaterialTheme -import androidx.compose.material.Surface -import androidx.compose.material.Text -import androidx.compose.runtime.Composable +import androidx.compose.material.* +import androidx.compose.runtime.* import androidx.compose.samples.crane.R import androidx.compose.samples.crane.data.ExploreModel import androidx.compose.samples.crane.home.OnExploreItemClicked @@ -53,10 +42,9 @@ import androidx.compose.ui.unit.dp import coil.annotation.ExperimentalCoilApi import coil.compose.AsyncImagePainter import coil.compose.rememberAsyncImagePainter -import coil.compose.rememberImagePainter -import coil.request.ImageRequest import coil.request.ImageRequest.Builder import com.google.accompanist.insets.navigationBarsHeight +import kotlinx.coroutines.launch @Composable fun ExploreSection( @@ -74,8 +62,35 @@ fun ExploreSection( Spacer(Modifier.height(8.dp)) // TODO Codelab: derivedStateOf step // TODO: Show "Scroll to top" button when the first item of the list is not visible - val listState = rememberLazyListState() - ExploreList(exploreList, onItemClicked, listState = listState) + + Box(Modifier.weight(1f)) { + val listState = rememberLazyListState() + ExploreList(exploreList, onItemClicked, listState = listState) + + val showButton by remember { + derivedStateOf { + listState.firstVisibleItemIndex > 0 + } + } + + if (showButton) { + val coroutineScope = rememberCoroutineScope() + FloatingActionButton( + backgroundColor = MaterialTheme.colors.primary, + modifier = Modifier + .align(Alignment.BottomEnd) + .navigationBarsPadding() + .padding(bottom = 8.dp), + onClick = { + coroutineScope.launch { + listState.scrollToItem(0) + } + } + ) { + Text("Up!") + } + } + } } } }