Les couleurs de Theme.of(context)
Fait partie de la section Des mises en page adaptées du Journey Flutter de Coddy. Leçon 22 sur 30.
Les boutons adoptent eux-mêmes le thème. Ce n’est pas le cas de vos propres boîtes : un Container avec Colors.teal.shade100 conserve cette couleur quel que soit le thème.
Pour colorer vos propres widgets à partir du thème, récupérez-le avec Theme.of(context) :
final colors = Theme.of(context).colorScheme;
Container(
color: colors.primaryContainer,
child: Text('Hi', style: TextStyle(color: colors.onPrimaryContainer)),
)Les couleurs sont organisées par paires. primaryContainer est un remplissage doux, et onPrimaryContainer est la couleur du texte sur ce remplissage, choisie pour être facile à lire. Il en va de même pour primary et onPrimary, surface et onSurface.
Theme.of(context) trouve le thème défini au-dessus du widget qui le demande. Le thème est défini par MaterialApp, le context doit donc se trouver en dessous, par exemple dans le build de HomeScreen. Dans le build de MyApp lui-même, qui se trouve au-dessus de MaterialApp, il ne trouve que le violet par défaut de Flutter.
Défi
FacileColore la bannière à partir du thème, afin qu’elle suive toute valeur de départ que tu choisis :
- au début de
HomeScreen'sbuild:final colors = Theme.of(context).colorScheme; - la couleur de la bannière :
colors.primaryContainer - la couleur de son texte :
colors.onPrimaryContainer
Essayez vous-même
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.teal),
),
home: const HomeScreen(),
);
}
}
class HomeScreen extends StatelessWidget {
const HomeScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Bookshelf')),
body: Padding(
padding: const EdgeInsets.all(16),
child: Column(
children: [
Container(
width: double.infinity,
padding: const EdgeInsets.all(24),
decoration: BoxDecoration(
color: Colors.teal.shade100,
borderRadius: BorderRadius.circular(16),
),
child: Text(
'You read 12 books this year',
style: TextStyle(fontSize: 20, color: Colors.teal.shade900),
),
),
],
),
),
);
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Des mises en page adaptées
1Partager une ligne
Expanded remplit la lignePartager l’espace avec flexFlexible épouse son enfantSpacer écarte les éléments4Tailles et points de rupture
Pleine largeur : double.infinityUne largeur maximaleTaille de l’écran : MediaQueryPoints de rupture de LayoutBuilder2L’erreur de débordement
L’erreur de débordementCorrection du débordement : agrandirCorrection du débordement : faire défilerCorrection du débordement : renvoyer à la ligneEspacement à l’intérieur d’un renvoi à la ligne5Énumérations et switch
Énumérations pour les types d’écranUtiliser switch avec une énumérationExpressions switch3Empiler des widgets
Empiler des widgets les uns sur les autresPositionner dans un coinAligner à l’intérieur d’une boîteSafeArea et l’encoche6Thèmes et mode sombre
Un thème d’application généré à partir d’une couleur de baseLes couleurs de Theme.of(context)Styles de texte du thèmeUn thème sombreUn interrupteur pour le mode sombreEntraînez-vous par vous-même : Compilateur Flutter en ligne