From 5650e6ccfe03467a80abbc5d2636f271817bad19 Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Sun, 24 Nov 2024 19:45:07 +0800 Subject: [PATCH] Fix tagger back handler --- .../com/hippo/ehviewer/ui/tools/Dialog.kt | 65 +++++++++---------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/Dialog.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/Dialog.kt index 91cb76f12..5e2f74d69 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/Dialog.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/Dialog.kt @@ -226,9 +226,10 @@ value class DialogState(val field: MutableComposable = mutableStateOf(null)) : M ) } } + var expanded by remember { mutableStateOf(false) } ExposedDropdownMenuBox( - expanded = true, - onExpandedChange = { }, + expanded = expanded, + onExpandedChange = { if (!it) expanded = false }, ) { OutlinedTextField( modifier = Modifier.menuAnchor(ExposedDropdownMenuAnchorType.PrimaryEditable), @@ -253,44 +254,42 @@ value class DialogState(val field: MutableComposable = mutableStateOf(null)) : M }, ) val query = state.text.toString().trim().takeIf { s -> s.isNotEmpty() } - val items = remember { mutableStateOf>?>(null) } + var items by remember { mutableStateOf(emptyList>()) } LaunchedEffect(suggestionTranslate, query) { - items.value = query?.let { suggestion(query, suggestionTranslate).take(15).toList() } + items = query?.let { suggestion(query, suggestionTranslate).take(15).toList() }.orEmpty() + expanded = items.isNotEmpty() } - val itemsNow = items.value ExposedDropdownMenu( - expanded = !itemsNow.isNullOrEmpty(), - onDismissRequest = { }, + expanded = expanded, + onDismissRequest = {}, modifier = Modifier.heightIn(max = 192.dp), ) { - if (!itemsNow.isNullOrEmpty()) { - itemsNow.forEach { (tag, hint) -> - DropdownMenuItem( - text = { - Column { - Text(text = tag, maxLines = 1) - ProvideTextStyle(MaterialTheme.typography.bodySmall) { - if (hint != null) { - Text( - text = hint, - maxLines = 1, - color = MaterialTheme.colorScheme.onSurfaceVariant, - ) - } + items.forEach { (tag, hint) -> + DropdownMenuItem( + text = { + Column { + Text(text = tag, maxLines = 1) + ProvideTextStyle(MaterialTheme.typography.bodySmall) { + if (hint != null) { + Text( + text = hint, + maxLines = 1, + color = MaterialTheme.colorScheme.onSurfaceVariant, + ) } } - }, - onClick = { - if (tag.endsWith(':')) { - state.setTextAndPlaceCursorAtEnd(tag) - } else { - selected += tag - state.clearText() - } - }, - contentPadding = ExposedDropdownMenuDefaults.ItemContentPadding, - ) - } + } + }, + onClick = { + if (tag.endsWith(':')) { + state.setTextAndPlaceCursorAtEnd(tag) + } else { + selected += tag + state.clearText() + } + }, + contentPadding = ExposedDropdownMenuDefaults.ItemContentPadding, + ) } } }