Temi e Stili
Introduzione
Puoi gestire gli stili dell'interfaccia utente della tua applicazione utilizzando i temi. I temi ti permettono di cambiare, ad esempio, la dimensione del font del testo, l'aspetto dei pulsanti e l'aspetto generale della tua applicazione.
Se sei nuovo ai temi, gli esempi sul sito web di Flutter ti aiuteranno a iniziare qui.
Per impostazione predefinita, Nylo Website include temi preconfigurati per la Modalita' chiara e la Modalita' scura.
Il tema si aggiornera' anche se il dispositivo entra in modalita' 'chiaro/scuro'.
Temi Chiaro e Scuro
- Tema chiaro -
lib/resources/themes/light_theme.dart - Tema scuro -
lib/resources/themes/dark_theme.dart
All'interno di questi file, troverai ThemeData e ThemeStyle predefiniti.
Creare un tema
Se vuoi avere temi multipli per la tua app, abbiamo un modo semplice per farlo. Se sei nuovo ai temi, segui la guida.
Per prima cosa, esegui il comando seguente dal terminale
metro make:theme bright_theme
Nota: sostituisci bright_theme con il nome del tuo nuovo tema.
Questo crea un nuovo tema nella tua directory /resources/themes/ e anche un file di colori del tema in /resources/themes/styles/.
// App Themes
final List<BaseThemeConfig<ColorStyles>> appThemes = [
BaseThemeConfig<ColorStyles>(
id: getEnv('LIGHT_THEME_ID'),
description: "Light theme",
theme: lightTheme,
colors: LightThemeColors(),
),
BaseThemeConfig<ColorStyles>(
id: getEnv('DARK_THEME_ID'),
description: "Dark theme",
theme: darkTheme,
colors: DarkThemeColors(),
),
BaseThemeConfig<ColorStyles>( // new theme automatically added
id: 'Bright Theme',
description: "Bright Theme",
theme: brightTheme,
colors: BrightThemeColors(),
),
];
Puoi modificare i colori per il tuo nuovo tema nel file /resources/themes/styles/bright_theme_colors.dart.
Colori del Tema
Per gestire i colori del tema nel tuo progetto, controlla la directory lib/resources/themes/styles.
Questa directory contiene i colori degli stili per light_theme_colors.dart e dark_theme_colors.dart.
In questo file, dovresti avere qualcosa di simile a quanto segue.
// e.g Light Theme colors
class LightThemeColors implements ColorStyles {
// general
@override
Color get background => const Color(0xFFFFFFFF);
@override
Color get content => const Color(0xFF000000);
@override
Color get primaryAccent => const Color(0xFF0045a0);
@override
Color get surfaceBackground => Colors.white;
@override
Color get surfaceContent => Colors.black;
// app bar
@override
Color get appBarBackground => Colors.blue;
@override
Color get appBarPrimaryContent => Colors.white;
// buttons
@override
Color get buttonBackground => Colors.blue;
@override
Color get buttonContent => Colors.white;
@override
Color get buttonSecondaryBackground => const Color(0xff151925);
@override
Color get buttonSecondaryContent => Colors.white.withAlpha((255.0 * 0.9).round());
// bottom tab bar
@override
Color get bottomTabBarBackground => Colors.white;
// bottom tab bar - icons
@override
Color get bottomTabBarIconSelected => Colors.blue;
@override
Color get bottomTabBarIconUnselected => Colors.black54;
// bottom tab bar - label
@override
Color get bottomTabBarLabelUnselected => Colors.black45;
@override
Color get bottomTabBarLabelSelected => Colors.black;
// toast notification
@override
Color get toastNotificationBackground => Colors.white;
}
Utilizzare i colori nei widget
import 'package:flutter_app/config/theme.dart';
...
// gets the light/dark background colour depending on the theme
ThemeColor.get(context).background
// e.g. of using the "ThemeColor" class
Text(
"Hello World",
style: TextStyle(
color: ThemeColor.get(context).content // Color - content
),
),
// or
Text(
"Hello World",
style: TextStyle(
color: ThemeConfig.light().colors.content // Light theme colors - primary content
),
),
Stili di Base
Gli stili di base ti permettono di personalizzare vari colori dei widget da un'unica area nel tuo codice.
Nylo Website viene fornito con stili di base preconfigurati per il tuo progetto situati in lib/resources/themes/styles/color_styles.dart.
Questi stili forniscono un'interfaccia per i colori del tuo tema in light_theme_colors.dart e dart_theme_colors.dart.
File lib/resources/themes/styles/color_styles.dart
abstract class ColorStyles {
// general
@override
Color get background;
@override
Color get content;
@override
Color get primaryAccent;
@override
Color get surfaceBackground;
@override
Color get surfaceContent;
// app bar
@override
Color get appBarBackground;
@override
Color get appBarPrimaryContent;
@override
Color get buttonBackground;
@override
Color get buttonContent;
@override
Color get buttonSecondaryBackground;
@override
Color get buttonSecondaryContent;
// bottom tab bar
@override
Color get bottomTabBarBackground;
// bottom tab bar - icons
@override
Color get bottomTabBarIconSelected;
@override
Color get bottomTabBarIconUnselected;
// bottom tab bar - label
@override
Color get bottomTabBarLabelUnselected;
@override
Color get bottomTabBarLabelSelected;
// toast notification
Color get toastNotificationBackground;
}
Puoi aggiungere stili aggiuntivi qui e poi implementare i colori nel tuo tema.
Cambiare tema
Nylo Website supporta la possibilita' di cambiare tema al volo.
Ad esempio, se hai bisogno di cambiare tema quando un utente tocca un pulsante per attivare il "tema scuro".
Puoi supportare questo facendo come segue:
import 'package:nylo_framework/theme/helper/ny_theme.dart';
...
TextButton(onPressed: () {
// set theme to use the "dark theme"
NyTheme.set(context, id: "dark_theme");
setState(() { });
}, child: Text("Dark Theme")
),
// or
TextButton(onPressed: () {
// set theme to use the "light theme"
NyTheme.set(context, id: "light_theme");
setState(() { });
}, child: Text("Light Theme")
),
Font
Aggiornare il font principale in tutta l'app e' facile in Nylo Website. Apri il file lib/config/design.dart e aggiorna quanto segue.
final TextStyle appThemeFont = GoogleFonts.lato();
Includiamo la libreria GoogleFonts nel repository, quindi puoi iniziare a usare tutti i font con poco sforzo. Per aggiornare il font a qualcos'altro, puoi fare quanto segue:
// OLD
// final TextStyle appThemeFont = GoogleFonts.lato();
// NEW
final TextStyle appThemeFont = GoogleFonts.montserrat();
Consulta i font sulla libreria ufficiale Google Fonts per saperne di piu'
Hai bisogno di usare un font personalizzato? Consulta questa guida - https://flutter.dev/docs/cookbook/design/fonts
Una volta aggiunto il tuo font, modifica la variabile come nell'esempio seguente.
final TextStyle appThemeFont = TextStyle(fontFamily: "ZenTokyoZoo"); // ZenTokyoZoo used as an example for the custom font
Design
Il file config/design.dart viene utilizzato per gestire gli elementi di design della tua app.
La variabile appFont contiene il font per la tua app.
La variabile logo viene utilizzata per visualizzare il Logo della tua app.
Puoi modificare resources/widgets/logo_widget.dart per personalizzare come vuoi visualizzare il tuo Logo.
La variabile loader viene utilizzata per visualizzare un loader. Nylo Website utilizzera' questa variabile in alcuni metodi helper come widget loader predefinito.
Puoi modificare resources/widgets/loader_widget.dart per personalizzare come vuoi visualizzare il tuo Loader.
Estensioni di Testo
Ecco le estensioni di testo disponibili che puoi utilizzare in Nylo Website.
| Nome Regola | Utilizzo | Info |
|---|---|---|
| Display Large | displayLarge() | Applica il textTheme displayLarge |
| Display Medium | displayMedium() | Applica il textTheme displayMedium |
| Display Small | displaySmall() | Applica il textTheme displaySmall |
| Heading Large | headingLarge() | Applica il textTheme headingLarge |
| Heading Medium | headingMedium() | Applica il textTheme headingMedium |
| Heading Small | headingSmall() | Applica il textTheme headingSmall |
| Title Large | titleLarge() | Applica il textTheme titleLarge |
| Title Medium | titleMedium() | Applica il textTheme titleMedium |
| Title Small | titleSmall() | Applica il textTheme titleSmall |
| Body Large | bodyLarge() | Applica il textTheme bodyLarge |
| Body Medium | bodyMedium() | Applica il textTheme bodyMedium |
| Body Small | bodySmall() | Applica il textTheme bodySmall |
| Label Large | labelLarge() | Applica il textTheme labelLarge |
| Label Medium | labelMedium() | Applica il textTheme labelMedium |
| Label Small | labelSmall() | Applica il textTheme labelSmall |
| Font Weight Bold | fontWeightBold | Applica il grassetto al widget Text |
| Font Weight Light | fontWeightLight | Applica il peso leggero al widget Text |
| Set Color | setColor(context, (color) => colors.primaryAccent) | Imposta un colore di testo diverso sul widget Text |
| Align Left | alignLeft | Allinea il font a sinistra |
| Align Right | alignRight | Allinea il font a destra |
| Align Center | alignCenter | Allinea il font al centro |
| Set Max Lines | setMaxLines(int maxLines) | Imposta il numero massimo di righe per il widget text |
Display large
Text("Hello World").displayLarge()
Display medium
Text("Hello World").displayMedium()
Display small
Text("Hello World").displaySmall()
Heading large
Text("Hello World").headingLarge()
Heading medium
Text("Hello World").headingMedium()
Heading small
Text("Hello World").headingSmall()
Title large
Text("Hello World").titleLarge()
Title medium
Text("Hello World").titleMedium()
Title small
Text("Hello World").titleSmall()
Body large
Text("Hello World").bodyLarge()
Body medium
Text("Hello World").bodyMedium()
Body small
Text("Hello World").bodySmall()
Label large
Text("Hello World").labelLarge()
Label medium
Text("Hello World").labelMedium()
Label small
Text("Hello World").labelSmall()
Font weight bold
Text("Hello World").fontWeightBold()
Font weight light
Text("Hello World").fontWeightLight()
Set color
Text("Hello World").setColor(context, (color) => colors.content)
// Color from your colorStyles
Align left
Text("Hello World").alignLeft()
Align right
Text("Hello World").alignRight()
Align center
Text("Hello World").alignCenter()
Set max lines
Text("Hello World").setMaxLines(5)