Je ne veux pas changer la couleur du texte de toute l'application. Juste tout le texte dans un conteneur. Puis-je l'envelopper avec un autre widget ou quelque chose pour ça?
4 Réponses :
Si vous utilisez le widget MaterialApp vous pouvez utiliser la propriété de thème de celui-ci et définir différents thèmes de Text et les appeler n'importe où dans votre application. Par exemple, le code suivant définit 3 thèmes de texte différents:
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: "Time Tracker",
theme: ThemeData(
textTheme: TextTheme(
headline: TextStyle(fontSize: 72.0, fontWeight: FontWeight.bold,color: Colors.blue),
title: TextStyle(fontSize: 36.0, fontStyle: FontStyle.italic,color: Colors.red),
body1: TextStyle(fontSize: 14.0, fontFamily: 'Hind',color: Colors.yellow),
),
),
home: LandingPage(),
);
}
}
Vous pouvez ensuite appeler un thème particulier (titre) n'importe où dans votre application comme ceci:
Text('Home Page',style: Theme.of(context).textTheme.headline,)
Ce qui vous donne le titre TextTheme
Mais cela s'applique à l'ensemble de l'application. l'utilisateur a explicitement demandé une solution qui ne s'applique qu'à un certain sous-arbre de ses widgets.
J'ai des fonctions pour tous mes styles
Text("blah", style:largeTextStyle())
alors je fais juste
TextStyle largeTextStyle() => TextStyle(fontSize: 150);
Pour appliquer certaines propriétés TextStyle uniquement à une sous-arborescence de votre application. Vous pouvez utiliser DefaultTextStyle
DefaultTextStyle( child: Container(child: /* your subtree */), style: TextStyle(color: Colors.red), ),
La réponse de flutter est bonne à mon avis. Mais la puissance de ThemeData est plus que vous ne le pensez. Voici la documentation officielle sur les thèmes pour une partie d'une application .
Vous pouvez fournir un Theme pour envelopper votre conteneur afin de fournir un nouveau thème. Voici deux façons de le faire:
Theme.of(context).textTheme.copyWith( body1: Theme.of(context).textTheme.body1.copyWith(color: Colors.red), )
Theme(
// Find and extend the parent theme using "copyWith". See the next
// section for more info on `Theme.of`.
data: Theme.of(context).copyWith(textTheme: /* Provide your theme here! */),
child: Container(
child: Text("your text here"),
),
);
Vous pouvez également utiliser un thème existant avec un peu de changement:
/*Not recommended, this could make a totally different If you just want a little part changed.*/
Theme(
// Create a unique theme with "ThemeData"
data: ThemeData(
textTheme: /* Your Text Theme*/,
),
child: Container(
onPressed: () {},
child: Text("Your Text Here"),
),
);
DefaultTextStyle?le widget
Texta une propriété appeléeTextStylequi a une propriété appeléecolor