Themes et style
Introduction
Vous pouvez gerer les styles d'interface de votre application en utilisant les themes. Les themes nous permettent de modifier par exemple la taille de police du texte, l'apparence des boutons et l'apparence generale de notre application.
Si vous etes nouveau avec les themes, les exemples sur le site web de Flutter vous aideront a commencer ici.
Par defaut, Nylo Website inclut des themes preconfigures pour le mode clair et le mode sombre.
Le theme se mettra egalement a jour si l'appareil passe en mode 'clair/sombre'.
Themes clair et sombre
- Theme clair -
lib/resources/themes/light_theme.dart - Theme sombre -
lib/resources/themes/dark_theme.dart
Dans ces fichiers, vous trouverez le ThemeData et le ThemeStyle predefinis.
Creer un theme
Si vous souhaitez avoir plusieurs themes pour votre application, nous avons un moyen facile de le faire. Si vous etes nouveau avec les themes, suivez le guide.
Tout d'abord, executez la commande ci-dessous depuis le terminal
metro make:theme bright_theme
Note : remplacez bright_theme par le nom de votre nouveau theme.
Cela cree un nouveau theme dans votre repertoire /resources/themes/ ainsi qu'un fichier de couleurs de theme dans /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(),
),
];
Vous pouvez modifier les couleurs de votre nouveau theme dans le fichier /resources/themes/styles/bright_theme_colors.dart.
Couleurs du theme
Pour gerer les couleurs du theme dans votre projet, consultez le repertoire lib/resources/themes/styles.
Ce repertoire contient les couleurs de style pour light_theme_colors.dart et dark_theme_colors.dart.
Dans ce fichier, vous devriez avoir quelque chose de similaire a ce qui suit.
// 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;
}
Utiliser les couleurs dans les widgets
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
),
),
Styles de base
Les styles de base vous permettent de personnaliser les couleurs de divers widgets depuis un seul endroit dans votre code.
Nylo Website est livre avec des styles de base preconfigures pour votre projet situes dans lib/resources/themes/styles/color_styles.dart.
Ces styles fournissent une interface pour les couleurs de votre theme dans light_theme_colors.dart et dart_theme_colors.dart.
Fichier 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;
}
Vous pouvez ajouter des styles supplementaires ici puis implementer les couleurs dans votre theme.
Changer de theme
Nylo Website prend en charge la possibilite de changer de theme a la volee.
Par exemple, si vous devez changer le theme lorsqu'un utilisateur appuie sur un bouton pour activer le "theme sombre".
Vous pouvez le faire de la maniere suivante :
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")
),
Polices
Mettre a jour votre police principale dans toute l'application est facile dans Nylo Website. Ouvrez le fichier lib/config/design.dart et mettez a jour ce qui suit.
final TextStyle appThemeFont = GoogleFonts.lato();
Nous incluons la bibliotheque GoogleFonts dans le depot, vous pouvez donc commencer a utiliser toutes les polices avec peu d'effort. Pour changer la police pour autre chose, vous pouvez faire ce qui suit :
// OLD
// final TextStyle appThemeFont = GoogleFonts.lato();
// NEW
final TextStyle appThemeFont = GoogleFonts.montserrat();
Consultez les polices sur la bibliotheque officielle Google Fonts pour en savoir plus
Besoin d'utiliser une police personnalisee ? Consultez ce guide - https://flutter.dev/docs/cookbook/design/fonts
Une fois que vous avez ajoute votre police, changez la variable comme dans l'exemple ci-dessous.
final TextStyle appThemeFont = TextStyle(fontFamily: "ZenTokyoZoo"); // ZenTokyoZoo used as an example for the custom font
Design
Le fichier config/design.dart est utilise pour gerer les elements de design de votre application.
La variable appFont contient la police de votre application.
La variable logo est utilisee pour afficher le logo de votre application.
Vous pouvez modifier resources/widgets/logo_widget.dart pour personnaliser la facon dont vous souhaitez afficher votre logo.
La variable loader est utilisee pour afficher un chargeur. Nylo Website utilisera cette variable dans certaines methodes helper comme widget de chargement par defaut.
Vous pouvez modifier resources/widgets/loader_widget.dart pour personnaliser la facon dont vous souhaitez afficher votre chargeur.
Extensions de texte
Voici les extensions de texte disponibles que vous pouvez utiliser dans Nylo Website.
| Nom de la regle | Utilisation | Info |
|---|---|---|
| Display Large | displayLarge() | Applique le textTheme displayLarge |
| Display Medium | displayMedium() | Applique le textTheme displayMedium |
| Display Small | displaySmall() | Applique le textTheme displaySmall |
| Heading Large | headingLarge() | Applique le textTheme headingLarge |
| Heading Medium | headingMedium() | Applique le textTheme headingMedium |
| Heading Small | headingSmall() | Applique le textTheme headingSmall |
| Title Large | titleLarge() | Applique le textTheme titleLarge |
| Title Medium | titleMedium() | Applique le textTheme titleMedium |
| Title Small | titleSmall() | Applique le textTheme titleSmall |
| Body Large | bodyLarge() | Applique le textTheme bodyLarge |
| Body Medium | bodyMedium() | Applique le textTheme bodyMedium |
| Body Small | bodySmall() | Applique le textTheme bodySmall |
| Label Large | labelLarge() | Applique le textTheme labelLarge |
| Label Medium | labelMedium() | Applique le textTheme labelMedium |
| Label Small | labelSmall() | Applique le textTheme labelSmall |
| Font Weight Bold | fontWeightBold | Applique le poids de police gras a un widget Text |
| Font Weight Light | fontWeightLight | Applique le poids de police leger a un widget Text |
| Set Color | setColor(context, (color) => colors.primaryAccent) | Definit une couleur de texte differente sur le widget Text |
| Align Left | alignLeft | Aligne la police a gauche |
| Align Right | alignRight | Aligne la police a droite |
| Align Center | alignCenter | Aligne la police au centre |
| Set Max Lines | setMaxLines(int maxLines) | Definit le nombre maximum de lignes pour le widget texte |
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)