Use um selo para mostrar um pequeno elemento visual que indique o status ou um valor numérico em outro elemento combinável. Confira alguns cenários comuns em que você pode usar um selo:
- Notificações: mostram o número de notificações não lidas em um ícone de app ou em um sino de notificação.
- Mensagens: indica mensagens novas ou não lidas em um aplicativo de chat.
- Atualizações de status: mostram o status de uma tarefa, como "concluída", "em andamento" ou "falhou".
- Quantidade do carrinho: mostra o número de itens no carrinho de compras de um usuário.
- Novo conteúdo: destaque novos conteúdos ou recursos disponíveis para o usuário.
Superfície da API
Use o elemento combinável BadgedBox
para implementar selos no seu aplicativo. Ele
é, na verdade, um contêiner. Você controla a aparência com esses dois parâmetros
principais:
content
: o conteúdo combinável que oBadgedBox
contém. Normalmente,Icon
.badge
: o elemento combinável que aparece como o selo sobre o conteúdo. Normalmente, o elemento combinávelBadge
dedicado.
Exemplo básico
Este snippet de código mostra uma implementação básica de BadgedBox
:
@Composable fun BadgeExample() { BadgedBox( badge = { Badge() } ) { Icon( imageVector = Icons.Filled.Mail, contentDescription = "Email" ) } }
Este exemplo mostra um selo que se sobrepõe ao elemento combinável Icon
fornecido. Observe
o seguinte no código:
BadgedBox
serve como o contêiner geral.- O argumento para o parâmetro
badge
deBadgedBox
éBadge
. ComoBadge
não tem argumentos próprios, o app exibe o selo padrão, que é um pequeno círculo vermelho. Icon
serve como o argumento para o parâmetrocontent
deBadgedBox
. Ele é o ícone sobre o qual o selo aparece. Nesse caso, é um ícone de e-mail.
Ele vai ficar assim:
Exemplo detalhado
O snippet abaixo demonstra como mostrar valores no selo que respondem às ações do usuário.
@Composable fun BadgeInteractiveExample() { var itemCount by remember { mutableStateOf(0) } Column( verticalArrangement = Arrangement.spacedBy(16.dp) ) { BadgedBox( badge = { if (itemCount > 0) { Badge( containerColor = Color.Red, contentColor = Color.White ) { Text("$itemCount") } } } ) { Icon( imageVector = Icons.Filled.ShoppingCart, contentDescription = "Shopping cart", ) } Button(onClick = { itemCount++ }) { Text("Add item") } } }
Este exemplo implementa um ícone de carrinho de compras com um selo que mostra o número de itens no carrinho do usuário.
- O
BadgedBox
aparece apenas quando a contagem de itens é maior que zero. - Os argumentos para
containerColor
econtentColor
controlam a aparência do selo. - O elemento combinável
Text
para o slot de conteúdo deBadge
aparece no selo. Nesse caso, ele mostra o número de itens no carrinho.
Essa implementação aparece da seguinte maneira: