theme_extension.dart 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import 'package:flutter/material.dart';
  2. import 'package:get/get.dart';
  3. import '../../../app/data/sp/ix_sp.dart';
  4. import '../ix_theme.dart';
  5. /// 响应式主题扩展
  6. /// 让 Get.theme 变成响应式对象
  7. class ReactiveTheme {
  8. static final RxBool _isLightTheme = true.obs;
  9. /// 初始化主题状态
  10. static void init() {
  11. _isLightTheme.value = IXSP.getThemeIsLight();
  12. }
  13. /// 获取当前主题状态
  14. static bool get isLightTheme => _isLightTheme.value;
  15. /// 切换主题
  16. static void toggleTheme() {
  17. _isLightTheme.value = !_isLightTheme.value;
  18. IXSP.setThemeIsLight(_isLightTheme.value);
  19. Get.changeThemeMode(_isLightTheme.value ? ThemeMode.light : ThemeMode.dark);
  20. }
  21. /// 设置主题
  22. static void setTheme(bool isLight) {
  23. if (_isLightTheme.value != isLight) {
  24. _isLightTheme.value = isLight;
  25. IXSP.setThemeIsLight(isLight);
  26. Get.changeThemeMode(isLight ? ThemeMode.light : ThemeMode.dark);
  27. }
  28. }
  29. /// 响应式主题数据
  30. static ThemeData get theme =>
  31. IXTheme.getThemeData(isLight: _isLightTheme.value);
  32. }
  33. /// 扩展 GetX,添加响应式主题方法
  34. extension GetXThemeExtension on GetInterface {
  35. /// 响应式主题数据
  36. ThemeData get reactiveTheme => ReactiveTheme.theme;
  37. }