BringIntoViewRequester
Function
Common
@JsName("funBringIntoViewRequester")
@RememberInComposition
fun BringIntoViewRequester(): BringIntoViewRequester
Create an instance of BringIntoViewRequester
that can be used with
Modifier.bringIntoViewRequester
. A child can then call
BringIntoViewRequester.bringIntoView
to send a request to any BringIntoViewModifierNode
parent so that they adjust its content to bring this item into view.
Here is a sample where a composable is brought into view:
Here is a sample where a part of a composable is brought into view:
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")
}
}
}
}