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
Text
a une propriété appeléeTextStyle
qui a une propriété appeléecolor