移除 InteractionState 后,Jetpack Compose Beta 1 中的提升按下状态

时间:2021-02-25 20:39:17

标签: android android-jetpack-compose

在 compose-beta01 之前,使用 InteractionState 在 Jetpack Compose 中提升按下状态非常容易:

@Composable
fun App() {
    val interactionState = remember { InteractionState() }
    val pressed = interactionState.contains(Interaction.Pressed)

    MyComposable(Modifier.clickable(interactionState = interactionState) { })
}

InteractionState 在 beta01 中被移除,现在有明显的方法来复制这种行为。如何使用 clickable 修饰符提升按下状态?

1 个答案:

答案 0 :(得分:1)

您是否尝试应用 Compose beta01 发行说明中的​​说明?

<块引用>

InteractionState 已替换为 [Mutable]InteractionSource

  • 接口负责发出/收集交互事件。
  • 不要将 interactionState = remember { InteractionState() } 传递给 ButtonModifier.clickable() 等组件,而是使用 interactionSource = remember { MutableInteractionSource() }
  • 代替:Interaction.Pressed in interactionState,您应该使用 InteractionSource 上的扩展函数,例如 InteractionSource.collectIsPressedAsState().
  • 对于复杂的用例,您可以使用 InteractionSource.interactions 来观察交互流。查看交互源 文档和示例以了解更多信息。
  • (I85965, b/152525426, b/171913923, b/171710801, b/174852378)

因此,在您的示例中,我会尝试以下操作:

val interactionSource = remember { MutableInteractionSource() }
val pressedState = interactionSource.collectIsPressedAsState()

MyComposable(
    Modifier.clickable(
        interactionSource = interactionSource,
        indication = LocalIndication.current
    ) {}
)