Menu
CoddyTech

Kolory Theme.of(context)

Część sekcji Układ dopasowany do ekranu ścieżki Flutter w Coddy. Lekcja 22 z 30.

Przyciski same dopasowują się do motywu. Własne kontenery — nie: Container z Colors.teal.shade100 zachowuje ten kolor niezależnie od motywu.

Aby kolorować własne widżety zgodnie z motywem, odczytaj go za pomocą Theme.of(context):

final colors = Theme.of(context).colorScheme;

Container(
  color: colors.primaryContainer,
  child: Text('Hi', style: TextStyle(color: colors.onPrimaryContainer)),
)

Kolory w schemacie występują w parach. primaryContainer to delikatne wypełnienie, a onPrimaryContainer to kolor tekstu na tym wypełnieniu, dobrany tak, by tekst był czytelny. To samo dotyczy par primary i onPrimary oraz surface i onSurface.

Theme.of(context) znajduje motyw znajdujący się nad widżetem, który o niego pyta. Motyw ustawia MaterialApp, więc context musi pochodzić z elementu znajdującego się pod nim, na przykład z metody build klasy HomeScreen. W metodzie build samej klasy MyApp, która znajduje się nad MaterialApp, dostępny jest tylko domyślny fioletowy motyw Fluttera.

challenge icon

Wyzwanie

Łatwy

Pokoloruj baner kolorami z motywu, aby dopasowywał się do dowolnego wybranego przez Ciebie ziarna:

  • na początku metody build w HomeScreen: final colors = Theme.of(context).colorScheme;
  • kolor banera: colors.primaryContainer
  • kolor jego tekstu: colors.onPrimaryContainer

Spróbuj swoich sił

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),
              ),
            ),
          ],
        ),
      ),
    );
  }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Układ dopasowany do ekranu

Poćwicz samodzielnie: Kompilator Flutter online