O componente snackbar serve como uma breve notificação que aparece na parte inferior da tela. Ela fornece feedback sobre uma operação ou ação interromper a experiência do usuário. As snackbars desaparecem após alguns segundos. A o usuário também pode dispensá-los com uma ação, como tocar em um botão.
Considere estes três casos de uso em que é possível usar um snackbar:
- Confirmação da ação:depois que um usuário exclui um e-mail ou uma mensagem, um "Snackbar" aparece para confirmar a ação e oferecer a opção "Desfazer" é a melhor opção.
- Status da rede:quando o app perde a conexão de Internet, uma snackbar aparece e nota que agora está off-line.
- Envio de dados:após o envio de um formulário ou atualização configurações, uma snackbar vai indicar que a alteração foi salva.
Exemplo básico
Para implementar uma snackbar, primeiro crie SnackbarHost
, que inclui uma
SnackbarHostState
. SnackbarHostState
fornece acesso ao
showSnackbar()
, que pode ser usada para mostrar a snackbar.
Essa função de suspensão requer um CoroutineScope
, como ao usar
rememberCoroutineScope
e pode ser chamado em resposta a eventos de IU para
mostrar um Snackbar
em Scaffold
.
val scope = rememberCoroutineScope() val snackbarHostState = remember { SnackbarHostState() } Scaffold( snackbarHost = { SnackbarHost(hostState = snackbarHostState) }, floatingActionButton = { ExtendedFloatingActionButton( text = { Text("Show snackbar") }, icon = { Icon(Icons.Filled.Image, contentDescription = "") }, onClick = { scope.launch { snackbarHostState.showSnackbar("Snackbar") } } ) } ) { contentPadding -> // Screen content }
Lanchonete cheia de ação
Você pode fornecer uma ação opcional e ajustar a duração da Snackbar
.
A função snackbarHostState.showSnackbar()
aceita outros parâmetros actionLabel
e duration
e retorna um SnackbarResult
.
val scope = rememberCoroutineScope() val snackbarHostState = remember { SnackbarHostState() } Scaffold( snackbarHost = { SnackbarHost(hostState = snackbarHostState) }, floatingActionButton = { ExtendedFloatingActionButton( text = { Text("Show snackbar") }, icon = { Icon(Icons.Filled.Image, contentDescription = "") }, onClick = { scope.launch { val result = snackbarHostState .showSnackbar( message = "Snackbar", actionLabel = "Action", // Defaults to SnackbarDuration.Short duration = SnackbarDuration.Indefinite ) when (result) { SnackbarResult.ActionPerformed -> { /* Handle snackbar action performed */ } SnackbarResult.Dismissed -> { /* Handle snackbar dismissed */ } } } } ) } ) { contentPadding -> // Screen content }
É possível fornecer uma Snackbar
personalizada com o parâmetro snackbarHost
. Consulte a
Consulte os documentos de referência da API SnackbarHost
para mais informações.