Karanlık Mod Anahtarı
Coddy'nin Flutter Journey'sinin Her Ekrana Uyan Düzenler bölümünün bir parçası. Ders 25 / 30.
Bazı kişiler bir uygulamada koyu modu ister, diğerlerinde istemez. Onlara bir anahtar sunun.
themeMode: diğer ayarlar gibi bir ayardır, bu yüzden duruma bağlı olabilir. MaterialApp öğesini oluşturan bileşen olan MyApp'in State durumunda bir bool tutun ve modu bu değere göre seçin:
bool _dark = false;
MaterialApp(
themeMode: _dark ? ThemeMode.dark : ThemeMode.light,
...
)Anahtar setState içinde _dark değerini değiştirdiğinde build yeniden çalışır, MaterialApp yeni modu alır ve kısa bir geçiş efektiyle tüm ekranların teması aynı anda değişir.
Durumun MaterialApp'in üzerinde tutulması gerekir, çünkü tema orada seçilir. Bu nedenle burada MyApp bir StatefulWidget'tır.
Görev
KolayAnahtarın temayı değiştirmesini sağla:
onChangediçinde, yeni değerisetStateiçinde_darkdeğişkenine ataMaterialAppiçindekithemeMode:değerini_darkdeğişkeninden belirle: true olduğunda koyu, false olduğunda açık
Kendin dene
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
bool _dark = false;
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.indigo),
),
darkTheme: ThemeData(
colorScheme: ColorScheme.fromSeed(
seedColor: Colors.indigo,
brightness: Brightness.dark,
),
),
home: Scaffold(
appBar: AppBar(title: const Text('Night Reader')),
body: Center(
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
const Text('Dark mode', style: TextStyle(fontSize: 20)),
const SizedBox(width: 12),
Switch(
value: _dark,
onChanged: (value) {},
),
],
),
),
),
);
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Her Ekrana Uyan Düzenler bölümündeki tüm dersler
1Bir Satırı Paylaşmak
Expanded Satırı Doldururflex ile Alanı PaylaşmakFlexible Çocuğunu SararSpacer Arayı Açar4Boyutlar ve Breakpoint’ler
Tam Genişlik: double.infinityMaksimum GenişlikEkran Boyutu: MediaQueryLayoutBuilder Breakpoint’leri3Widget'ları Üst Üste Yerleştirme
Widget'ları Üst Üste YerleştirmeBir Köşeye KonumlandırmaBir Kutunun İçinde HizalamaSafeArea ve Çentik6Temalar ve Karanlık Mod
Bir Tohumdan Uygulama TemasıTheme.of(context) RenkleriTemadan Metin StilleriKaranlık TemaKaranlık Mod AnahtarıKendi başına pratik yap: Online Flutter derleyicisi