Questa pagina descrive le best practice per lavorare con gli stili che garantiscono la coerenza in tutto il codebase, nonché i principi che abbiamo seguito durante la progettazione delle API.
Che cosa fare
Segui queste best practice:
Consigliato: utilizza gli stili per gli elementi visivi e i modificatori per i comportamenti
Utilizza l'API Styles per la configurazione visiva (sfondi, spaziatura interna, bordi) e riserva i modificatori per comportamenti come la logica di clic, il rilevamento dei gesti o l'accessibilità.
Azione consigliata: esporre i parametri di stile nei sistemi di progettazione
Per i tuoi componenti del sistema di progettazione personalizzati, devi esporre un oggetto Style
dopo il parametro del modificatore.
@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 }
Azione consigliata: sostituisci i parametri basati sulla visualizzazione con uno stile
Valuta la possibilità di sostituire i parametri nei tuoi elementi composable con un singolo parametro Style.
Ad esempio:
// 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) { }
Consigli: dai la priorità agli stili per le animazioni
Utilizza il blocco animate integrato per lo stile basato sullo stato con animazioni per
migliorare le prestazioni rispetto ai modificatori.
Azione consigliata: sfrutta la strategia "L'ultima scrittura vince"
Sfrutta il fatto che le proprietà style vengono sovrascritte anziché impilate.
Utilizzalo per sostituire i bordi o gli sfondi predefiniti dei componenti senza
avere bisogno di più parametri.
Che cosa non fare
I seguenti pattern sono sconsigliati:
Non utilizzare gli stili per la logica di interazione
Non tentare di gestire il rilevamento di onClick o dei gesti all'interno di uno stile. Gli stili
sono limitati alle configurazioni visive basate sullo stato, pertanto non devono gestire
la logica di business; devono invece avere solo un aspetto visivo diverso in base allo stato.
Sbagliato: fornire uno stile predefinito come parametro predefinito
I parametri di stile devono sempre essere dichiarati utilizzando 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) } ) { }
Per includere un parametro "default", unisci lo stile del parametro in entrata con quello predefinito:
@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 } }
Non: fornire parametri di stile agli elementi componibili basati sul layout
Anche se puoi fornire uno stile a qualsiasi componente componibile, non è previsto che i componenti componibili basati sul layout o a livello di schermo accettino uno stile. Dal punto di vista del consumatore non è chiaro cosa farebbe uno stile a questo livello. Gli stili sono progettati per i componenti, non necessariamente per i layout.