module_cache.dart 2.07 KB
import 'dart:convert';
import 'dart:ui';

import '../../models/course_module_entity.dart';
import '../../utils/sp_util.dart';
import '../utils/color_parser.dart';

///模块缓存类
class ModuleCache {
  // Private constructor
  ModuleCache._privateConstructor();

  // Singleton instance
  static final ModuleCache _instance = ModuleCache._privateConstructor();

  // Public accessor for the singleton instance
  static ModuleCache get instance => _instance;

  // Variable to store the current module entity
  CourseModuleEntity? _currentModule;

  // Key for SharedPreferences
  static const String _moduleKey = "courseModule";

  // Initialize the cache by loading data from SharedPreferences
  Future<void> init() async {
    String? jsonString = SpUtil.getInstance().get<String>(_moduleKey);
    if (jsonString != null) {
      _currentModule = CourseModuleEntity.fromJson(json.decode(jsonString));
    }
  }

  // Getter and setter for the current module
  CourseModuleEntity? get currentModule => _currentModule;
  set currentModule(CourseModuleEntity? value) {
    _currentModule = value;
    _saveToPrefs(value);
  }

  // Method to clear the cached module data
  void clear() {
    _currentModule = null;
    _clearPrefs();
  }

  // Save module data to SharedPreferences
  void _saveToPrefs(CourseModuleEntity? module) {
    if (module != null) {
      String jsonString = json.encode(module.toJson());
      SpUtil.getInstance().setData(_moduleKey, jsonString);
    } else {
      SpUtil.getInstance().remove(_moduleKey);
    }
  }

  String getCurrentThemeColorStr({String? colorStr}) {
    return colorStr ?? _currentModule.getSafeThemeColor();
  }

  ///根据当前课程阶段获取系统主题色
  Color getCurrentThemeColor({String? colorStr}) {
    return parseColor(getCurrentThemeColorStr(colorStr: colorStr));
  }

  ///根据当前课程阶段获取系统主题名称
  String getCurrentThemeName({String? name}) {
    return name ?? _currentModule.getSafeName();
  }

  // Clear all data from SharedPreferences
  void _clearPrefs() async {
    SpUtil.getInstance().remove(_moduleKey);
  }
}