BringIntoViewRequester
Interface
Common
sealed interface BringIntoViewRequester
Can be used to send bringIntoView requests. Pass it as a parameter to
Modifier.bringIntoViewRequester().
For instance, you can call bringIntoView() to make all the scrollable parents
scroll so that the specified item is brought into the scroll viewport.
Functions
suspend fun bringIntoView(rect: Rect? = null)
Bring this item into bounds by making all the BringIntoViewModifierNode parents to bring
their content appropriately.
This method will not return until this request is satisfied or a newer request interrupts it.
If this call is interrupted by a newer call, this method will throw a
CancellationException.
Parameters
| rect | The rectangle (In local coordinates) that should be brought into view. If you don't specify the coordinates, the coordinates of the Modifier.bringIntoViewRequester() associated with this BringIntoViewRequester will be used. |
Code Examples
BringIntoViewSample
@Composable
fun BringIntoViewSample() {
Row(Modifier.horizontalScroll(rememberScrollState())) {
repeat(100) {
val bringIntoViewRequester = remember { BringIntoViewRequester() }
val coroutineScope = rememberCoroutineScope()
Box(
Modifier
// This associates the RelocationRequester with a Composable that wants to be
// brought into view.
.bringIntoViewRequester(bringIntoViewRequester)
.onFocusChanged {
if (it.isFocused) {
coroutineScope.launch {
// This sends a request to all parents that asks them to scroll so
// that this item is brought into view.
bringIntoViewRequester.bringIntoView()
}
}
}
.focusTarget()
)
}
}
}
BringPartOfComposableIntoViewSample
@Composable
fun BringPartOfComposableIntoViewSample() {
with(LocalDensity.current) {
val bringIntoViewRequester = remember { BringIntoViewRequester() }
val coroutineScope = rememberCoroutineScope()
Column {
Box(
Modifier.border(2.dp, Color.Black)
.size(500f.toDp())
.horizontalScroll(rememberScrollState())
) {
Canvas(
Modifier.size(1500f.toDp(), 500f.toDp())
// This associates the RelocationRequester with a Composable that wants
// to be brought into view.
.bringIntoViewRequester(bringIntoViewRequester)
) {
drawCircle(color = Color.Red, radius = 250f, center = Offset(750f, 250f))
}
}
Button(
onClick = {
val circleCoordinates = Rect(500f, 0f, 1000f, 500f)
coroutineScope.launch {
// This sends a request to all parents that asks them to scroll so that
// the circle is brought into view.
bringIntoViewRequester.bringIntoView(circleCoordinates)
}
}
) {
Text("Bring circle into View")
}
}
}
}
