<div class='type'>Interface</div>


<a id='references'></a>

<div class='sourceset sourceset-common'>Common</div>



```kotlin
interface InteractionSource
```


InteractionSource represents a stream of `Interaction`s corresponding to events emitted by a
component. These `Interaction`s can be used to change how components appear in different states,
such as when a component is pressed or dragged.

A common use case is `androidx.compose.foundation.indication`, where
`androidx.compose.foundation.Indication` implementations can subscribe to an `InteractionSource`
to draw indication for different `Interaction`s, such as a ripple effect for
`PressInteraction.Press` and a state overlay for `DragInteraction.Start`.

For simple cases where you are interested in the binary state of an `Interaction`, such as
whether a component is pressed or not, you can use `InteractionSource.collectIsPressedAsState`
and other extension functions that subscribe and return a `Boolean` `State` representing whether
the component is in this state or not.


For more complex cases, such as when building an `androidx.compose.foundation.Indication`, the
order of the events can change how a component / indication should be drawn. For example, if a
component is being dragged and then becomes focused, the most recent `Interaction` is
`FocusInteraction.Focus`, so the component should appear in a focused state to signal this event
to the user.

InteractionSource exposes `interactions` to support these use cases - a `Flow` representing the
stream of all emitted `Interaction`s. This also provides more information, such as the press
position of `PressInteraction.Press`, so you can show an effect at the specific point the
component was pressed, and whether the press was `PressInteraction.Release` or
`PressInteraction.Cancel`, for cases when a component should behave differently if the press was
released normally or interrupted by another gesture.

You can collect from `interactions` as you would with any other `Flow`:


To emit `Interaction`s so that consumers can react to them, see `MutableInteractionSource`.


## Properties

<div class='sourceset sourceset-common'>Common</div>


```kotlin
val interactions: Flow<Interaction>
```


`Flow` representing the stream of all `Interaction`s emitted through this
`InteractionSource`. This can be used to see `Interaction`s emitted in order, and with
additional metadata, such as the press position for `PressInteraction.Press`.