Theme.of(context)-Farben
Teil des Abschnitts Layouts für jede Bildschirmgröße der Flutter-Journey von Coddy. Lektion 22 von 30.
Schaltflächen übernehmen das Design von selbst. Deine eigenen Kästen tun das nicht: Ein Container mit Colors.teal.shade100 behält diese Farbe, unabhängig vom Design.
Um deine eigenen Widgets mit Farben aus dem Design zu versehen, rufe es mit Theme.of(context) ab:
final colors = Theme.of(context).colorScheme;
Container(
color: colors.primaryContainer,
child: Text('Hi', style: TextStyle(color: colors.onPrimaryContainer)),
)Das Farbschema besteht aus Paaren. primaryContainer ist eine dezente Füllfarbe, und onPrimaryContainer ist die Farbe des Textes auf dieser Füllung, die so gewählt ist, dass er gut lesbar ist. Dasselbe gilt für primary und onPrimary, surface und onSurface.
Theme.of(context) findet das Design oberhalb des Widgets, das danach fragt. Das Design wird von MaterialApp festgelegt, daher muss der context unterhalb davon liegen, etwa im build von HomeScreen. Im eigenen build von MyApp, das oberhalb von MaterialApp liegt, findet es nur Flutters standardmäßiges Lila.
Aufgabe
EinfachFärbe das Banner mithilfe des Themes ein, damit es jedem Seed folgt, den du auswählst:
- am Anfang von
HomeScreensbuild:final colors = Theme.of(context).colorScheme; - die Farbe des Banners:
colors.primaryContainer - die Textfarbe:
colors.onPrimaryContainer
Probier es selbst
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),
),
),
],
),
),
);
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Layouts für jede Bildschirmgröße
1Eine Zeile teilen
Expanded füllt die ZeilePlatz teilen mit flexFlexible umschließt sein KindSpacer schafft Abstand3Widgets stapeln
Widgets übereinander stapelnIn einer Ecke positionierenIn einer Box ausrichtenSafeArea und die Notch6Designs und Dunkelmodus
Ein App-Theme aus einem SeedTheme.of(context)-FarbenTextstile aus dem ThemeEin dunkles ThemeEin Dunkelmodus-SchalterÜbe selbstständig: Online-Flutter-Compiler