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