CameraScreen: scroll automatically to newly added page

This commit is contained in:
Pierre-Yves Nicolas
2025-06-24 13:05:46 +02:00
parent c49a271c39
commit 2452e1d556

View File

@@ -35,8 +35,10 @@ import androidx.compose.foundation.layout.height
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.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.lazy.LazyRow import androidx.compose.foundation.lazy.LazyRow
import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Button import androidx.compose.material3.Button
@@ -97,6 +99,13 @@ fun CameraScreen(
} }
} }
val listState = rememberLazyListState()
LaunchedEffect(pageIds.size) {
if (pageIds.isNotEmpty()) {
listState.animateScrollToItem(pageIds.lastIndex)
}
}
CameraScreenContent( CameraScreenContent(
modifier, modifier,
cameraPreview = { cameraPreview = {
@@ -110,7 +119,8 @@ fun CameraScreen(
CameraCapturedPagesRow( CameraCapturedPagesRow(
pageIds = pageIds, pageIds = pageIds,
imageLoader = { id -> viewModel.getBitmap(id) }, imageLoader = { id -> viewModel.getBitmap(id) },
onPageClick = { index -> viewModel.navigateTo(Screen.FinalizeDocument(index)) } onPageClick = { index -> viewModel.navigateTo(Screen.FinalizeDocument(index)) },
listState = listState
) )
}, },
cameraUiState = CameraUiState(pageIds.size, liveAnalysisState, captureState), cameraUiState = CameraUiState(pageIds.size, liveAnalysisState, captureState),
@@ -275,10 +285,12 @@ fun CameraCapturedPagesRow(
pageIds: List<String>, pageIds: List<String>,
imageLoader: (String) -> Bitmap?, imageLoader: (String) -> Bitmap?,
onPageClick: (Int) -> Unit, onPageClick: (Int) -> Unit,
listState: LazyListState,
) { ) {
if (pageIds.isEmpty()) return if (pageIds.isEmpty()) return
LazyRow ( LazyRow (
state = listState,
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.padding(horizontal = 8.dp, vertical = 4.dp), .padding(horizontal = 8.dp, vertical = 4.dp),
@@ -347,7 +359,8 @@ private fun ScreenPreview(captureState: CaptureState) {
BitmapFactory.decodeStream(input) BitmapFactory.decodeStream(input)
} }
}, },
onPageClick = {} onPageClick = {},
listState = LazyListState()
) )
}, },
cameraUiState = CameraUiState(pageCount = 4, LiveAnalysisState(), captureState), cameraUiState = CameraUiState(pageCount = 4, LiveAnalysisState(), captureState),