新增日志全局开关便于调试,优化部分机型可能出现的界面错乱或不显示等问题

(cherry picked from commit 5853ba7fe4e0cbe4f04b20c86e9fd84c5557139f)
This commit is contained in:
2025-11-02 00:31:31 -07:00
committed by speakeloudest
parent cf297caf09
commit 17b3f6b92d
9 changed files with 139 additions and 34 deletions
+25 -6
View File
@@ -4,6 +4,7 @@ import '../utils/kr_update_util.dart';
import '../utils/kr_secure_storage.dart';
import '../utils/kr_log_util.dart';
import '../services/singbox_imp/kr_sing_box_imp.dart';
import '../utils/kr_init_log_collector.dart'; // 🔧 新增:导入日志收集器
import 'dart:async';
import 'dart:convert';
import 'dart:io';
@@ -1337,10 +1338,17 @@ class AppConfig {
KRUpdateApplication? kr_update_application;
// 🔧 新增:日志收集器实例
final _initLog = KRInitLogCollector();
Future<void> initConfig({
Future<void> Function()? onSuccess,
}) async {
_initLog.logSeparator();
_initLog.log('🌐 开始应用配置初始化(域名加载)', tag: 'Domain');
if (_isInitializing) {
_initLog.logWarning('配置初始化已在进行中,跳过重复调用', tag: 'Domain');
KRLogUtil.kr_w('配置初始化已在进行中,跳过重复调用', tag: 'AppConfig');
return;
}
@@ -1348,10 +1356,13 @@ class AppConfig {
_isInitializing = true;
try {
// 🔧 修复6:启动时优先加载上次成功的域名
_initLog.log('开始加载基础域名配置', tag: 'Domain');
await KRDomain.kr_loadBaseDomain();
_initLog.logSuccess('当前使用域名: ${KRDomain.kr_currentDomain}', tag: 'Domain');
KRLogUtil.kr_i('📍 当前使用域名: ${KRDomain.kr_currentDomain}', tag: 'AppConfig');
// 所有模式都走正常的配置请求流程
_initLog.log('开始配置请求流程(包含重试机制)', tag: 'Domain');
KRLogUtil.kr_i('🚀 开始配置初始化', tag: 'AppConfig');
await _startAutoRetry(onSuccess);
} finally {
@@ -1402,24 +1413,32 @@ class AppConfig {
return;
}
_initLog.log('发起配置请求 API (尝试 $totalAttempts/$maxTotalAttempts)', tag: 'Domain');
final result = await _kr_userApi.kr_config();
result.fold(
(error) async {
_initLog.logError('配置请求失败 (重试 $currentRetryCount/$kr_maxRetryCount)', tag: 'Domain', error: error);
KRLogUtil.kr_e('配置初始化失败: $error', tag: 'AppConfig');
currentRetryCount++;
// 计算重试延迟时间
final retryDelay = (kr_retryInterval * pow(kr_backoffFactor, currentRetryCount)).toInt();
// 尝试切换域名
await KRDomain.kr_switchToNextDomain();
// 等待后重试,至少延迟100ms避免立即重试
final actualDelay = max(retryDelay, 100);
_initLog.log('将在 ${actualDelay}ms 后重试', tag: 'Domain');
// 尝试切换域名
_initLog.log('尝试切换到下一个备用域名', tag: 'Domain');
await KRDomain.kr_switchToNextDomain();
_initLog.log('当前域名: ${KRDomain.kr_currentDomain}', tag: 'Domain');
// 等待后重试
await Future.delayed(Duration(milliseconds: actualDelay));
await executeConfigRequest();
},
(config) async {
_initLog.logSuccess('配置请求成功!', tag: 'Domain');
_initLog.log('网站ID: ${config.kr_website_id}', tag: 'Domain');
_initLog.log('官网: ${config.kr_official_website}', tag: 'Domain');
_retryTimer?.cancel();
currentRetryCount = 0;