Drag and Drop Functionality in my Game. (kotlin, Android studio)
15:35 04 Dec 2025

Having issues because Block won't place after letting go on gamegrid. OnDragEnd() doesn't seem to fire. logcat is also attached. I Know it is probably something simple I am missing.

2025-12-04 14:35:03.132 25545-25545 cr_CachingUmaRecorder com.betterblocks I Flushed 19 samples from 19 histograms, 0 samples were dropped.

2025-12-04 14:35:35.505 25545-25545 ๐Ÿ” DROP com.betterblocks D END - Using local snapshot row=null col=null valid=false

2025-12-04 14:35:35.505 25545-25545 ๐Ÿ” DROP com.betterblocks E โŒ CONDITIONS NOT MET - Block will NOT place


@Composable
    fun BlockPreviewCard(
        block: Block,
        isSelected: Boolean,
        onClick: (Block) -> Unit,
        onDragStart: () -> Unit,
        onDrag: (Offset) -> Unit,
        onDragEnd: () -> Unit,
        cellSize: Dp
    ) {
        val borderColor = if (isSelected) Color.White else Color.Gray.copy(alpha = 0.3f)
        val borderWidth = if (isSelected) 3.dp else 1.dp

        Card(
            shape = RoundedCornerShape(10.dp),
            border = BorderStroke(borderWidth, borderColor),
            colors = CardDefaults.cardColors(containerColor = DeepBlue.copy(alpha = 0.5f)),
            elevation = CardDefaults.cardElevation(defaultElevation = if (isSelected) 8.dp else 4.dp),
            modifier = Modifier
                .wrapContentSize()
                .padding(4.dp)
                .pointerInput(block) {
                    forEachGesture {
                        coroutineScope {
                            awaitPointerEventScope {
                                val down = awaitFirstDown(requireUnconsumed = false)
                                val drag = awaitTouchSlopOrCancellation(down.id) { change, _ ->
                                    change.consume()
                                }

                                if (drag != null) {
                                    Log.d("๐ŸŽฎ GESTURE", "onDragStart FIRED for ${block.name}")
                                    onDragStart()
                                    drag(drag.id) {
                                        onDrag(it.positionChange())
                                        it.consume()
                                    }
                                    Log.d("๐ŸŽฎ GESTURE", "onDragEnd FIRED for ${block.name}")
                                    onDragEnd()
                                } else {
                                    Log.d("๐ŸŽฎ GESTURE", "onTap FIRED for ${block.name}")
                                    onClick(block)
                                }
                            }
                        }
                    }
                }
        ) {
            BlockShapeDisplay(block, cellSize)
        }
    }
android kotlin android-jetpack-compose