Configures the current node and any children nodes as a Content Receiver.
ReceiveContentFullSample
@OptIn(ExperimentalFoundationApi::class)
@Composable
fun ReceiveContentFullSample() {
val state = rememberTextFieldState()
var images by remember { mutableStateOf<List<ImageBitmap>>(emptyList()) }
var dragging by remember { mutableStateOf(false) }
var hovering by remember { mutableStateOf(false) }
Column {
Row { images.forEach { Image(bitmap = it, contentDescription = null) } }
// Note that only TextFieldState override of the text field supports contentReceiver
BasicTextField(
state = state,
modifier =
Modifier.background(
when {
dragging -> Color.Red
hovering -> Color.Green
else -> MaterialTheme.colors.background
}
)
.contentReceiver(
receiveContentListener =
object : ReceiveContentListener {
override fun onDragStart() {
dragging = true
}
override fun onDragEnd() {
hovering = false
dragging = false
}
override fun onDragEnter() {
hovering = true
}
override fun onDragExit() {
hovering = false
}
override fun onReceive(
transferableContent: TransferableContent
): TransferableContent? {
if (!transferableContent.hasMediaType(MediaType.Image)) {
return transferableContent
}
val newImages = mutableListOf<ImageBitmap>()
return transferableContent
.consume { item ->
// only consume this item if we can read an imageBitmap
item.readImageBitmap()?.let {
newImages += it
true
} ?: false
}
.also { images = newImages }
}
}
),
)
}
}