theme_controller.dart 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import 'package:get/get.dart';
  2. import '../../../../config/theme/theme_extensions/theme_extension.dart';
  3. import '../../../../config/translations/strings_enum.dart';
  4. import '../../../data/sp/ix_sp.dart';
  5. /// 主题模式信息
  6. class ThemeModeInfo {
  7. final String code; // 'system', 'dark', 'light'
  8. final String name;
  9. ThemeModeInfo({required this.code, required this.name});
  10. }
  11. class ThemeController extends GetxController {
  12. /// 当前选中的主题模式
  13. final selectedMode = 'system'.obs;
  14. /// 主题模式列表
  15. List<ThemeModeInfo> get themeModes => [
  16. ThemeModeInfo(code: 'system', name: Strings.followSystem.tr),
  17. ThemeModeInfo(code: 'dark', name: Strings.darkMode.tr),
  18. ThemeModeInfo(code: 'light', name: Strings.lightMode.tr),
  19. ];
  20. @override
  21. void onInit() {
  22. super.onInit();
  23. // 加载当前主题模式
  24. selectedMode.value = IXSP.getThemeMode();
  25. }
  26. /// 选择主题模式
  27. void selectThemeMode(String mode) {
  28. if (selectedMode.value == mode) return;
  29. selectedMode.value = mode;
  30. IXSP.setThemeMode(mode);
  31. // 应用主题
  32. _applyTheme(mode);
  33. }
  34. /// 应用主题
  35. void _applyTheme(String mode) {
  36. ReactiveTheme.setThemeMode(mode);
  37. }
  38. }