diff --git a/feature/radar/src/main/java/com/rtbishop/look4sat/feature/radar/LogTab.kt b/feature/radar/src/main/java/com/rtbishop/look4sat/feature/radar/LogTab.kt index b2137137..31a94f41 100644 --- a/feature/radar/src/main/java/com/rtbishop/look4sat/feature/radar/LogTab.kt +++ b/feature/radar/src/main/java/com/rtbishop/look4sat/feature/radar/LogTab.kt @@ -48,6 +48,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalContext import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.key import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -201,6 +202,11 @@ fun LogTab( modifier = Modifier.padding(horizontal = 10.dp, vertical = 4.dp) ) groupEntries.forEach { entry -> + // key() ties the row's swipe/countdown state to the QSO id. Without it + // Compose reuses state by position, so a list reorder mid-countdown + // (a new QSO is inserted at index 0) moves the pending deletion onto a + // different record and deletes the wrong one. + key(entry.id) { SwipeDeleteRow( onDelete = { queue.remove(entry.id) @@ -234,6 +240,7 @@ fun LogTab( ) } } + } // key(entry.id) } } } diff --git a/feature/radar/src/main/java/com/rtbishop/look4sat/feature/radar/WavelogLogScreen.kt b/feature/radar/src/main/java/com/rtbishop/look4sat/feature/radar/WavelogLogScreen.kt index 92ea90be..a45a1982 100644 --- a/feature/radar/src/main/java/com/rtbishop/look4sat/feature/radar/WavelogLogScreen.kt +++ b/feature/radar/src/main/java/com/rtbishop/look4sat/feature/radar/WavelogLogScreen.kt @@ -25,6 +25,7 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue +import androidx.compose.runtime.key import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue @@ -116,6 +117,7 @@ fun WavelogLogScreen( // Rule between groups (md --- effect) HorizontalDivider(thickness = 1.5.dp, color = GridLineColor) groupEntries.forEach { entry -> + key(entry.id) { SwipeDeleteRow( onDelete = { queue.remove(entry.id) @@ -153,6 +155,7 @@ fun WavelogLogScreen( } } } + } // key(entry.id) } } }