Как очистить фокус BasicTextField при нажатии в другом месте в Compose Multiplatform?

у меня есть в Jetbrains Compose Multiplatform для настольных ПК. Когда я нажимаю на него, TextField получает фокус и становится доступным для редактирования. Однако, когда я щелкаю где-нибудь еще в своем приложении, фокус не теряется, и поле все еще редактируется, как если бы я просто щелкнул по нему.

Я знаю, что это нормальное и преднамеренное поведение. Тем не менее, я хочу, чтобы TextField становился несфокусированным, когда пользователь щелкает где-то еще, независимо от того, является ли он компонуемым с возможностью нажатия или без него.

Как мне этого добиться?

1 ответ

Это один из способов, которым я делал это в прошлом.

       val keyboardController = LocalSoftwareKeyboardController.current
 val focusManager = LocalFocusManager.current
 val interactionSource = remember { MutableInteractionSource() }

Затем я сделал свой родительский макет кликабельным.

      Box(modifier = Modifier
       .clickable(
           interactionSource = interactionSource,
           indication = null    // this gets rid of the ripple effect
       ) {
           keyboardController?.hide()
           focusManager.clearFocus(true)
       }
Другие вопросы по тегам