We just launched Compose Examples featuring over 150+ components! Check it out →

bringIntoViewRequester

Common

Modifier in Compose Foundation

Modifier that can be used to send [scrollIntoView][BringIntoViewRequester.bringIntoView] requests.

The following example uses a bringIntoViewRequester to bring an item into the parent bounds. The example demonstrates how a composable can ask its parents to scroll so that the component using this modifier is brought into the bounds of all its parents.

Last updated:

Installation

dependencies {
   implementation("androidx.compose.foundation:foundation:1.8.0-alpha01")
}

Overloads

@Suppress("ModifierInspectorInfo")
fun Modifier.bringIntoViewRequester(bringIntoViewRequester: BringIntoViewRequester): Modifier

Parameters

namedescription
bringIntoViewRequesterAn instance of [BringIntoViewRequester]. This hoisted object can be used to send [scrollIntoView][BringIntoViewRequester.scrollIntoView] requests to parents of the current composable.

Code Example

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()
            )
        }
    }
}
by @alexstyl