import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:hive/hive.dart'; import '../cekirdek/sabitler.dart'; import '../ui/tema/tema_tanimi.dart'; /// Tema modu — kullanıcı sistem ayarına da bırakabilir. enum TemaModu { acik, koyu, sistem } /// Tema durumunu Hive 'ayarlar' kutusunda saklayan StateNotifier. class TemaDurumNotifier extends StateNotifier { TemaDurumNotifier() : super(TemaModu.koyu) { _yukle(); } Box? _kutu; static const String _anahtar = 'tema_modu'; Future _yukle() async { try { _kutu = Hive.isBoxOpen(FikoSabitler.boxAyarlar) ? Hive.box(FikoSabitler.boxAyarlar) : await Hive.openBox(FikoSabitler.boxAyarlar); final kayit = _kutu!.get(_anahtar, defaultValue: TemaModu.koyu.name); state = TemaModu.values.firstWhere( (e) => e.name == kayit, orElse: () => TemaModu.koyu, ); } catch (_) { // Hive kapalıysa varsayılan koyu kalır. } } void degistir(TemaModu yeni) { state = yeni; _kutu?.put(_anahtar, yeni.name); } /// Açık ↔ Koyu hızlı toggle (sistem modundan da çıkar). void toggle() { final yeni = state == TemaModu.koyu ? TemaModu.acik : TemaModu.koyu; degistir(yeni); } } final temaProvider = StateNotifierProvider((ref) { return TemaDurumNotifier(); }); /// Mevcut sistem parlaklığına göre kullanılacak ThemeData'yı verir. ThemeData temaCozumle(TemaModu modu, Brightness sistem) { final aydinlik = switch (modu) { TemaModu.acik => true, TemaModu.koyu => false, TemaModu.sistem => sistem == Brightness.light, }; return aydinlik ? FikoTema.acik() : FikoTema.koyu(); }