import 'dart:convert'; import 'package:flutter/foundation.dart'; import 'package:get/get.dart'; import 'package:json_annotation/json_annotation.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../global.dart'; part 'site_config.g.dart'; @JsonSerializable() class SiteConfig { List moduleStyles; List moduleScripts; String renderTheme; SiteConfig({ this.moduleStyles = const [], this.moduleScripts = const [], this.renderTheme = Global.renderThemeFallback, }); factory SiteConfig.fromJson(Map json) => _$SiteConfigFromJson(json); Map toJson() => _$SiteConfigToJson(this); } class AppSettingsController extends GetxController { bool _ignoreSave = false; bool isInit = false; List moduleStyles = []; List moduleScripts = []; String renderTheme = Global.renderThemeFallback; @override void onInit() { super.onInit(); loadFromStorage(); if (isInit) { // 尝试更新APP配置 loadFromRemote(); } } /// 从本地存储读取 Future loadFromStorage() async { try { final prefs = await SharedPreferences.getInstance(); var siteConfigJson = prefs.getString("siteConfigCache"); if (siteConfigJson == null) return; var siteConfigObject = jsonDecode(siteConfigJson); if (siteConfigObject == null) return; var siteConfigData = SiteConfig.fromJson(siteConfigObject); moduleScripts = siteConfigData.moduleScripts; moduleStyles = siteConfigData.moduleStyles; renderTheme = siteConfigData.renderTheme; } catch (ex) { if (kDebugMode) { print(ex); } } finally { _ignoreSave = false; } } Future loadFromRemote() async {} /// 缓存到本地存储 void saveToStorage() { if (_ignoreSave) return; final prefs = Global.sharedPreferences!; var siteConfigData = SiteConfig( moduleScripts: moduleScripts, moduleStyles: moduleStyles, renderTheme: renderTheme, ); var siteConfigJson = jsonEncode(siteConfigData.toJson()); prefs.setString("siteConfigCache", siteConfigJson); } }