fix: enhance drag-and-drop experience in ListsScreen by adding coroutine delay for smoother animations

This commit is contained in:
2025-10-26 15:35:13 +01:00
parent 6b9f248adf
commit 540c8d4800
@@ -44,6 +44,7 @@ import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@@ -54,6 +55,8 @@ import com.collabtable.app.R
import com.collabtable.app.data.database.CollabTableDatabase import com.collabtable.app.data.database.CollabTableDatabase
import com.collabtable.app.data.model.CollabList import com.collabtable.app.data.model.CollabList
import com.collabtable.app.data.preferences.PreferencesManager import com.collabtable.app.data.preferences.PreferencesManager
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import org.burnoutcrew.reorderable.ReorderableItem import org.burnoutcrew.reorderable.ReorderableItem
import org.burnoutcrew.reorderable.detectReorder import org.burnoutcrew.reorderable.detectReorder
import org.burnoutcrew.reorderable.rememberReorderableLazyListState import org.burnoutcrew.reorderable.rememberReorderableLazyListState
@@ -167,6 +170,7 @@ fun ListsScreen(
add(to.coerceIn(0, size), removeAt(from)) add(to.coerceIn(0, size), removeAt(from))
} }
val scope = rememberCoroutineScope()
val reorderState = val reorderState =
rememberReorderableLazyListState( rememberReorderableLazyListState(
onMove = { from, to -> onMove = { from, to ->
@@ -175,8 +179,12 @@ fun ListsScreen(
working.move(from.index, to.index) working.move(from.index, to.index)
}, },
onDragEnd = { _, _ -> onDragEnd = { _, _ ->
dragging = false // Commit first, then keep dragging=true briefly so the UI can animate smoothly
viewModel.commitReorder(working.map { it.id }) viewModel.commitReorder(working.map { it.id })
scope.launch {
delay(150)
dragging = false
}
}, },
) )