如何在 Compose Multiplatform 中点击其他地方后清除 BasicTextField 的焦点?

7
我在 Jetbrains Compose Multiplatform for desktop 中有一个 BasicTextField。当我点击它时,它会获取焦点并变得可编辑。然而,当我在应用程序的其他地方单击时,焦点并不会丢失,文本字段仍然可编辑,就好像我刚刚单击了它一样。
我知道这种行为是正常和预期的。尽管如此,无论是可单击的还是不可单击的组合件,我都希望在用户单击其他地方时,TextField 变成未聚焦状态。
我该如何实现这个功能?
1个回答

10

这是我过去做过的一种方法。

 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)
       }

2
谢谢!虽然当点击其他可点击的元素时它仍然没有清除焦点,但对我来说已经足够好了 :) - Timer ErTim
我将答案中的 Modifier 添加到我的 Column 中,发现任何可点击的内容都需要调用 focusManager.clearFocus(true)。由于键盘已经可以完美隐藏,所以我没有添加答案的这一部分。 - Scott Lohr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接