import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; import '../utils/logger.dart'; class ThemeService { final _box = GetStorage(); // 旧版布尔键,兼容历史数据 final _key = 'isDarkMode'; // 新版字符串键,支持系统跟随/深色/浅色 final _modeKey = 'themeModePreference'; /// 获取主题模式(优先读取新版字符串偏好;否则回退到旧版布尔值;都没有则跟随系统) ThemeMode getThemeMode() { try { final String? pref = _box.read(_modeKey); if (pref != null) { switch (pref) { case 'system': Logger.info('获取保存的主题: 系统跟随'); return ThemeMode.system; case 'dark': Logger.info('获取保存的主题: 暗黑'); return ThemeMode.dark; case 'light': Logger.info('获取保存的主题: 浅色'); return ThemeMode.light; } } // 回退读取旧版布尔值 final isDarkMode = isSavedDarkMode(); if (_box.hasData(_key)) { Logger.info('获取保存的主题(兼容旧版): ${isDarkMode ? "暗黑" : "浅色"}'); return isDarkMode ? ThemeMode.dark : ThemeMode.light; } // 默认系统跟随 Logger.info('未发现主题偏好,默认系统跟随'); return ThemeMode.system; } catch (e) { Logger.error('读取主题模式失败: ${e.toString()}'); return ThemeMode.system; } } /// 是否是暗黑模式(兼容旧逻辑) bool isSavedDarkMode() { try { final value = _box.read(_key); Logger.info('从存储读取旧版主题设置: $value'); return value ?? false; } catch (e) { Logger.error('读取旧版主题设置失败: ${e.toString()}'); return false; } } /// 保存主题模式到本地存储(兼容旧方法,同时写入新版字符串键) Future saveThemeMode(bool isDarkMode) async { try { Logger.info('保存主题设置: ${isDarkMode ? "暗黑" : "浅色"}'); await _box.write(_key, isDarkMode); await _box.write(_modeKey, isDarkMode ? 'dark' : 'light'); } catch (e) { Logger.error('保存主题设置失败: ${e.toString()}'); } } /// 新版:显式保存主题模式(system/dark/light) Future saveThemeModePreference(ThemeMode mode) async { try { final String value = mode == ThemeMode.system ? 'system' : (mode == ThemeMode.dark ? 'dark' : 'light'); Logger.info('保存主题偏好(新版): $value'); await _box.write(_modeKey, value); // 同步旧键,保持兼容 await _box.write(_key, mode == ThemeMode.dark); } catch (e) { Logger.error('保存主题偏好失败: ${e.toString()}'); } } }