git.iko.soy/parseable-android
on master help sign in
Fix dataset list scroll position resetting to middle after refresh (#16)

The LazyColumn used stable keys (stream name) but no explicit scroll state, so Compose preserved the old scroll position after refresh data arrived. Add a rememberLazyListState() and scroll to item 0 when isLoading transitions to false. https://claude.ai/code/session_01DuA8Y1HbuwKcMgtwKhYMrr Co-authored-by: Claude <noreply@anthropic.com>

commitbcc22518cb9c3cf04324c25e405529a85bf3518f authoriko <mail@iko.soy> dateSun 15 Feb 2026, 19:40 (8 months ago) parentc55e0c3
1 file changed+11
app/src/main/java/com/parseable/android/ui/screens/streams/StreamsScreen.kt+11
app/src/main/java/com/parseable/android/ui/screens/streams/StreamsScreen.kt+11
@@ -3,6 +3,7 @@ package com.parseable.android.ui.screens.streams
33import androidx.compose.foundation.layout.*
44import androidx.compose.foundation.lazy.LazyColumn
55import androidx.compose.foundation.lazy.items
6+import androidx.compose.foundation.lazy.rememberLazyListState
67import androidx.compose.material.icons.Icons
78import androidx.compose.material.icons.automirrored.filled.Logout
89import androidx.compose.material.icons.filled.*
@@ -36,6 +37,15 @@ fun StreamsScreen(
3637 var searchQuery by remember { mutableStateOf("") }
3738 val snackbarHostState = remember { SnackbarHostState() }
3839
40+ val listState = rememberLazyListState()
41+
42+ // Scroll to top when a refresh completes (isLoading transitions to false)
43+ LaunchedEffect(state.isLoading) {
44+ if (!state.isLoading) {
45+ listState.scrollToItem(0)
46+ }
47+ }
48+
3949 val filteredStreams = remember(state.streams, searchQuery, state.favoriteNames) {
4050 val favorites = state.favoriteNames
4151 val filtered = if (searchQuery.isBlank()) {
@@ -169,6 +179,7 @@ fun StreamsScreen(
169179 )
170180 }
171181 LazyColumn(
182+ state = listState,
172183 contentPadding = PaddingValues(horizontal = 16.dp, vertical = 8.dp),
173184 verticalArrangement = Arrangement.spacedBy(8.dp),
174185 modifier = Modifier.weight(1f),