Solicitar o foco de maneira programática

Em alguns fluxos de usuários, o aplicativo precisa mover explicitamente o foco para um componente específico. Por exemplo, quando um usuário clica em um botão "Pesquisar", talvez você queira colocar o foco automaticamente no campo de entrada de pesquisa.

Usar FocusRequester

Para solicitar o foco explicitamente:

  1. Crie e lembre-se de uma instância FocusRequester: val focusRequester = remember { FocusRequester() }.
  2. Anexe o FocusRequester ao elemento combinável de destino usando o modificador focusRequester.
  3. Chame requestFocus() em um callback de evento (como onClick) ou um escopo de corrotina.

val focusRequester = remember { FocusRequester() }
var text by remember { mutableStateOf("") }

TextField(
    value = text,
    onValueChange = { text = it },
    modifier = Modifier.focusRequester(focusRequester)
)

val focusRequester = remember { FocusRequester() }
var text by remember { mutableStateOf("") }

TextField(
    value = text,
    onValueChange = { text = it },
    modifier = Modifier.focusRequester(focusRequester)
)

Button(onClick = { focusRequester.requestFocus() }) {
    Text("Request focus on TextField")
}

Definir o foco inicial da tela

Para colocar o foco inicial em um componente específico quando uma tela aparece pela primeira vez, acione requestFocus() dentro de um LaunchedEffect(Unit):

LaunchedEffect(Unit) {
    focusRequester.requestFocus()
}

Ao navegar entre contêineres ou retornar de outra tela, você também pode anexar focusRestorer() a contêineres principais para retornar automaticamente o foco ao último filho em foco. Para mais informações, consulte o guia Restaurar o foco.