CodeBlanks Logo Icon CodeBlanks

Tema kaydetme

Tema tercihini shared_preferences ile kalıcı yapmayı öğrenirsin.

Tema kaydetme

Kullanıcının seçtiği temayı kalıcı yapmak için shared_preferences kullanırsın. Tema adını bir String olarak kaydedersin; uygulama açıldığında okuyup MaterialApp'in themeMode özelliğine verirsin. Böylece kullanıcı her açılışta kendi temasını görür.

await prefs.setString('theme', 'dark');

final theme = prefs.getString('theme') ?? 'light';
// themeMode: theme == 'dark' ? ThemeMode.dark : ThemeMode.light

?? ile varsayılan tema

Uygulama ilk açıldığında 'theme' anahtarı henüz yoktur; getString null döner. ?? operatörü ile varsayılan bir değer verirsin. Kullanıcı tema seçtiğinde setString ile kaydeder, sonraki açılışlarda okunan değer kullanılır.

final saved = prefs.getString('theme');
final theme = saved ?? 'light';
print(theme);  // 'light' ya da kayıtlı değer

Uygulama Temayı kaydet ve oku

setString('theme', 'dark') ile temayı kaydet, getString('theme') ?? 'light' ile oku ve print ile bastır.

Başlangıç kodu

main.dart
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  final prefs = await SharedPreferences.getInstance();
  // setString ile 'theme' = 'dark' kaydet
  // getString ile oku, yoksa 'light' ver
  // print ile bastır
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(home: Scaffold(body: Center(child: Text('tema')));
  }
}

Örnek çözüm

main.dart
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  final prefs = await SharedPreferences.getInstance();
  await prefs.setString('theme', 'dark');
  final theme = prefs.getString('theme') ?? 'light';
  print(theme);
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(home: Scaffold(body: Center(child: Text('tema')));
  }
}

Beklenen çıktı

dark

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Kayıtlı tema ne zaman okunmalı?

  • Yalnızca kullanıcı butona bastığında
  • Her build çağrısında
  • Uygulama açılırken main içinde Doğru cevap
  • Hiçbir zaman, varsayılan yeterli

Açıklama: Tema tercihi uygulama açılırken main içinde okunursa, kullanıcı kendi temasını ilk anda görür; butona basmayı beklemek gerekmez.

2 Tema okurken varsayılan ver

Soru
final theme = prefs.getString('theme') ____;
Cevap
final theme = prefs.getString('theme') ?? 'light';

Açıklama: Anahtar yoksa getString null döner; ?? ile 'light' varsayılan değer verirsin.

3 Tema kalıcılaştırma parçaları

Kavram Anlamı
'theme' Anahtar adı
setString Temayı yazar
getString Temayı okur
themeMode MaterialApp özelliği

Orta seviye bölümündeki tüm dersler