From feb3825823e75cb695da83a01b558ae4280a8ea8 Mon Sep 17 00:00:00 2001 From: fankesyooni Date: Sat, 18 Nov 2023 02:55:07 +0800 Subject: [PATCH] fix: focusable not work in DropdownList for Android --- .../com/highcapable/flexiui/component/Dropdown.kt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/flexiui-core/src/commonMain/kotlin/com/highcapable/flexiui/component/Dropdown.kt b/flexiui-core/src/commonMain/kotlin/com/highcapable/flexiui/component/Dropdown.kt index 21baeb3..f1ba6d4 100644 --- a/flexiui-core/src/commonMain/kotlin/com/highcapable/flexiui/component/Dropdown.kt +++ b/flexiui-core/src/commonMain/kotlin/com/highcapable/flexiui/component/Dropdown.kt @@ -70,6 +70,8 @@ import androidx.compose.ui.UiComposable import androidx.compose.ui.draw.clip import androidx.compose.ui.focus.FocusDirection import androidx.compose.ui.focus.FocusManager +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Shape import androidx.compose.ui.graphics.SolidColor @@ -163,6 +165,7 @@ fun DropdownList( ) { val focused by interactionSource.collectIsFocusedAsState() val hovered by interactionSource.collectIsHoveredAsState() + val focusRequester = remember { FocusRequester() } var menuHeightPx by remember { mutableStateOf(0) } val startPadding = style.startPadding.orElse() ?: style.padding val endPadding = style.endPadding.orElse() ?: style.padding @@ -185,12 +188,16 @@ fun DropdownList( style = style, border = border, enabled = enabled, + focusRequester = focusRequester, interactionSource = interactionSource, modifier = modifier.rippleClickable( enabled = enabled, role = Role.DropdownList, interactionSource = interactionSource - ) { onExpandedChange(!expanded) } + ) { + focusRequester.requestFocus() + onExpandedChange(!expanded) + } ), menuHeightPx = { menuHeightPx = it } ) { @@ -366,9 +373,11 @@ private fun Modifier.dropdownList( style: DropdownListStyle, border: BorderStroke, enabled: Boolean, + focusRequester: FocusRequester, interactionSource: MutableInteractionSource, modifier: Modifier ) = status(enabled) + .focusRequester(focusRequester) .focusable(enabled, interactionSource) .hoverable(interactionSource, enabled) .clip(style.shape)