Nesta página, descrevemos as práticas recomendadas para trabalhar com estilos que alcançam consistência em todo o codebase, além dos princípios que seguimos ao projetar as APIs.
O que fazer
Siga estas práticas recomendadas:
Faça: use estilos para recursos visuais e modificadores para comportamentos
Use a API Styles para configuração visual (fundos, padding, bordas) e reserve modificadores para comportamentos como lógica de clique, detecção de gestos ou acessibilidade.
Fazer: expor parâmetros de estilo em sistemas de design
Para seus próprios componentes personalizados do sistema de design, exponha um objeto Style
após o parâmetro do modificador.
@Composable fun GradientButton( modifier: Modifier = Modifier, // ✅ DO: for design system components, expose a style modifier to consumers to be able to customize the components style: Style = Style ) { // Consume the style }
Fazer: substituir parâmetros visuais por um estilo
Considere substituir os parâmetros nos elementos combináveis por um único parâmetro Style.
Exemplo:
// Before @Composable fun OldButton(background: Color, fontColor: Color) { } // After // ✅ DO: Replace visual-based parameters with a style that includes same properties @Composable fun NewButton(style: Style = Style) { }
Fazer: priorizar estilos para animações
Use o bloco animate integrado para estilização baseada em estado com animações para
ganhos de performance em relação aos modificadores.
Faça: aproveite o "Last-write-wins"
Aproveite o fato de que as propriedades style substituem em vez de serem empilhadas.
Use isso para substituir as bordas ou planos de fundo padrão dos componentes sem precisar de vários parâmetros.
O que não fazer
Não use os seguintes padrões:
Não: use estilos para lógica de interação
Não tente processar onClick ou detecção de gestos em um estilo. Os estilos são limitados a configurações visuais com base no estado. Portanto, eles não devem processar a lógica de negócios. Em vez disso, eles só precisam ter uma aparência diferente com base no estado.
Não: forneça um estilo padrão como um parâmetro padrão.
Os parâmetros de estilo sempre precisam ser declarados usando style: Style = Style:
@Composable fun BadButton( modifier: Modifier = Modifier, // ❌ DON'T set a default style here as a parameter style: Style = Style { background(Color.Red) } ) { }
Para incluir um parâmetro "padrão", mescle o estilo do parâmetro recebido com o padrão definido:
@Composable fun GoodButton( modifier: Modifier = Modifier, // ✅ Do: always pass it as a Style, do not pass other defaults style: Style = Style ) { // ... val defaultStyle = Style { background(Color.Red) } // ✅ Do Combine defaults inside with incoming parameter Box(modifier = modifier.styleable(styleState, defaultStyle, style)) { // your logic } }
Não: forneça parâmetros de estilo para elementos combináveis baseados em layout
Embora seja possível fornecer um estilo a qualquer elemento combinável, não é esperado que elementos combináveis baseados em layout ou no nível da tela aceitem estilo. Não fica claro do ponto de vista do consumidor o que um estilo faria nesse nível. Os estilos são projetados para componentes, não necessariamente layouts.