by @alexstyl
✉️ Leave your feedback

← Back to Foundation

dragAndDropTarget

Modifier
in
Foundation
. Since 1.6.0-alpha07

Overview

Examples

Community Notes

@Composable
fun TextDragAndDropTargetSample(
    eventSummary: String?,
    onDragAndDropEventDropped: (DragAndDropEvent) -> Unit,
) {
    val validMimeTypePrefixes = remember {
        setOf(
            ClipDescription.MIMETYPE_TEXT_INTENT,
            "image/",
            "text/",
            "video/",
            "audio/",
        )
    }
    var backgroundColor by remember { mutableStateOf(Color.Transparent) }
    Box(
        modifier = Modifier
            .fillMaxSize()
            .dragAndDropTarget(
                shouldStartDragAndDrop = accept@{ startEvent ->
                    val hasValidMimeType = startEvent.mimeTypes().any { eventMimeType ->
                        validMimeTypePrefixes.any(eventMimeType::startsWith)
                    }
                    hasValidMimeType
                },
                target = DragAndDropTarget(
                    onStarted = {
                        backgroundColor = Color.DarkGray.copy(alpha = 0.2f)
                    },
                    onDrop = { event ->
                        onDragAndDropEventDropped(event)
                        true
                    },
                    onEnded = {
                        backgroundColor = Color.Transparent
                    }
                ),
            )
            .background(backgroundColor)
            .border(
                width = 4.dp,
                color = Color.Magenta,
                shape = RoundedCornerShape(16.dp)
            ),
    ) {
        when (eventSummary) {
            null -> Text(
                modifier = Modifier
                    .align(Alignment.Center),
                text = "Drop anything here"
            )

            else -> Text(
                modifier = Modifier
                    .padding(
                        horizontal = 16.dp,
                        vertical = 24.dp
                    )
                    .verticalScroll(rememberScrollState()),
                text = eventSummary
            )
        }
    }
}
Next ComponentBaseTextField