I colori di Theme.of(context)
Fa parte della sezione Layout adattabili del percorso Flutter di Coddy. Lezione 22 di 30.
I pulsanti adottano il tema automaticamente. Le tue caselle, invece, no: un Container con Colors.teal.shade100 mantiene quel colore indipendentemente dal tema.
Per colorare i tuoi widget usando il tema, leggilo con Theme.of(context):
final colors = Theme.of(context).colorScheme;
Container(
color: colors.primaryContainer,
child: Text('Hi', style: TextStyle(color: colors.onPrimaryContainer)),
)Lo schema di colori è organizzato in coppie. primaryContainer è un riempimento tenue e onPrimaryContainer è il colore del testo sopra quel riempimento, scelto per essere facile da leggere. Lo stesso vale per primary e onPrimary, surface e onSurface.
Theme.of(context) trova il tema sopra il widget che lo richiede. Il tema è impostato da MaterialApp, quindi il context deve essere uno discendente, ad esempio quello di build di HomeScreen. Nel build di MyApp, che si trova sopra MaterialApp, trova soltanto il viola predefinito di Flutter.
Sfida
FacileColora il banner usando il tema, così seguirà qualsiasi colore iniziale tu scelga:
- all'inizio di
builddiHomeScreen:final colors = Theme.of(context).colorScheme; - il colore del banner:
colors.primaryContainer - il colore del testo:
colors.onPrimaryContainer
Provalo tu
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),
),
),
],
),
),
);
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Layout adattabili
1Condividere una riga
Expanded riempie la rigaCondividere lo spazio con flexFlexible si adatta al suo elemento figlioSpacer tiene gli elementi separati3Sovrapporre i widget
Sovrapporre i widget in altoPosizionare in un angoloAllineare dentro un riquadroSafeArea e la tacca6Temi e modalità scura
Un tema per l'app a partire da un semeI colori di Theme.of(context)Stili di testo dal temaUn tema scuroUn interruttore per la modalità scuraEsercitati da solo: Compilatore Flutter online