// ignore_for_file: use_build_context_synchronously import 'dart:async'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:hexcolor/hexcolor.dart'; import 'base/ui_model.dart'; import 'common/conf/app_conf.dart'; import 'ui/settings/upgrade_dialog_ui.dart'; import 'ui/settings/upgrade_dialog_ui_model.dart'; final globalUIModel = AppGlobalUIModel(); final globalUIModelProvider = ChangeNotifierProvider((ref) => globalUIModel); class AppGlobalUIModel extends BaseUIModel { Timer? activityThemeColorTimer; Future getRunningGameUser() async { await Future.delayed(const Duration(milliseconds: 300)); ///TODO 实现获取运行中用户名 return "xkeyC"; } Future doCheckUpdate(BuildContext context, {bool init = true}) async { dynamic checkUpdateError; if (!init) { try { await AppConf.checkUpdate(); } catch (e) { checkUpdateError = e; } } await Future.delayed(const Duration(milliseconds: 100)); if (AppConf.networkVersionData == null) { showToast(context, "网络异常,这可能是服务器正在维护或遭受攻击... \n进入离线模式.. \n\n请谨慎在离线模式中使用。 \n当前版本构建日期:${AppConf.appVersionDate}\n QQ群:940696487 \n错误信息:$checkUpdateError"); return false; } final lastVersion = AppConf.isMSE ? AppConf.networkVersionData?.mSELastVersionCode : AppConf.networkVersionData?.lastVersionCode; if ((lastVersion ?? 0) > AppConf.appVersionCode) { // need update final r = await showDialog( dismissWithEsc: false, context: context, builder: (context) => BaseUIContainer( uiCreate: () => UpgradeDialogUI(), modelCreate: () => UpgradeDialogUIModel())); if (r != true) { showToast(context, "获取更新信息失败,请稍后重试。"); return false; } return true; } return false; } checkActivityThemeColor() { if (activityThemeColorTimer != null) { activityThemeColorTimer?.cancel(); activityThemeColorTimer = null; } if (AppConf.networkVersionData == null || AppConf.networkVersionData?.activityColors?.enable != true) return; final startTime = AppConf.networkVersionData!.activityColors?.startTime; final endTime = AppConf.networkVersionData!.activityColors?.endTime; if (startTime == null || endTime == null) return; final now = DateTime.now().millisecondsSinceEpoch; dPrint("now == $now start == $startTime end == $endTime"); if (now < startTime) { activityThemeColorTimer = Timer( Duration(milliseconds: startTime - now), checkActivityThemeColor); dPrint("start Timer ...."); } else if (now >= startTime && now <= endTime) { dPrint("update Color ...."); // update Color final colorCfg = AppConf.networkVersionData!.activityColors; AppConf.colorBackground = HexColor(colorCfg?.background ?? "#132431").withOpacity(.75); AppConf.colorMenu = HexColor(colorCfg?.menu ?? "#132431").withOpacity(.95); AppConf.colorMica = HexColor(colorCfg?.mica ?? "#0A3142"); notifyListeners(); // wait for end activityThemeColorTimer = Timer(Duration(milliseconds: endTime - now), checkActivityThemeColor); } else { dPrint("reset Color ...."); AppConf.colorBackground = HexColor("#132431").withOpacity(.75); AppConf.colorMenu = HexColor("#132431").withOpacity(.95); AppConf.colorMica = HexColor("#0A3142"); notifyListeners(); } notifyListeners(); } }