fix: 1.修复域名切换失败; 2.动态域名添加核心白名单,3.修复windows字体

This commit is contained in:
speakeloudest 2026-01-09 17:50:21 -08:00
parent 12eb8348d3
commit 9b5e370f0b
4 changed files with 150 additions and 109 deletions

View File

@ -85,10 +85,10 @@ class KRSplashController extends GetxController {
print('🧹 清理域名检测状态...'); print('🧹 清理域名检测状态...');
KRDomain.kr_resetDomainState(); KRDomain.kr_resetDomainState();
// 🔧 P2优化 // 🔧 P2优化
print('🌐 启动后台任务:网站配置加载...'); // print('🌐 启动后台任务:网站配置加载...');
KRLogUtil.kr_i('🌐 后台任务:网站配置和设备登录', tag: 'SplashController'); // KRLogUtil.kr_i('🌐 后台任务:网站配置和设备登录', tag: 'SplashController');
_kr_initSiteConfig(); // // _kr_initSiteConfig(); // _kr_continueInitialization
// 🔧 // 🔧
if (kDebugMode) { if (kDebugMode) {
@ -551,6 +551,14 @@ class KRSplashController extends GetxController {
} }
// //
// 🔧
// initSiteConfig
// 使
_logStepTiming('开始站点配置初始化');
await _kr_initSiteConfig();
_logStepTiming('站点配置初始化完成');
_logStepTiming('开始设备登录检查'); _logStepTiming('开始设备登录检查');
// 5 // 5
final success = await KRAppRunData.getInstance().kr_checkAndPerformDeviceLogin(); final success = await KRAppRunData.getInstance().kr_checkAndPerformDeviceLogin();
@ -569,7 +577,12 @@ class KRSplashController extends GetxController {
} }
_logStepTiming('设备登录检查完成'); _logStepTiming('设备登录检查完成');
// // (init会导致重复AppConfig内部有防重
// _kr_initSiteConfig(KRSiteConfig)
// AppConfig().initConfig主要是做AppConfig层面的配置加载
// AppConfig().initConfig API
// AppConfig().initConfig 使)
_initLog.log('⚙️ 开始初始化应用配置(域名加载等)', tag: 'Continue'); _initLog.log('⚙️ 开始初始化应用配置(域名加载等)', tag: 'Continue');
KRLogUtil.kr_i('⚙️ 开始初始化应用配置...', tag: 'SplashController'); KRLogUtil.kr_i('⚙️ 开始初始化应用配置...', tag: 'SplashController');
await AppConfig().initConfig( await AppConfig().initConfig(

View File

@ -51,11 +51,15 @@ class KRSiteConfigService extends ChangeNotifier {
/// ///
Future<bool> initialize() async { Future<bool> initialize() async {
int retryCount = 0;
const int maxRetries = 5;
while (retryCount < maxRetries) {
try { try {
if (kDebugMode) { if (kDebugMode) {
print('🔧 KRSiteConfigService.initialize() 开始执行'); print('🔧 KRSiteConfigService.initialize() 开始执行 (尝试 ${retryCount + 1}/$maxRetries)');
} }
KRLogUtil.kr_i('🔧 开始初始化网站配置', tag: 'KRSiteConfigService'); KRLogUtil.kr_i('🔧 开始初始化网站配置 (尝试 ${retryCount + 1}/$maxRetries)', tag: 'KRSiteConfigService');
// Debug 使 // Debug 使
final baseUrl = AppConfig().baseUrl; final baseUrl = AppConfig().baseUrl;
@ -118,59 +122,65 @@ class KRSiteConfigService extends ChangeNotifier {
return true; return true;
} else { } else {
KRLogUtil.kr_e('❌ API返回错误 - ${responseData['msg']}', tag: 'KRSiteConfigService'); KRLogUtil.kr_e('❌ API返回错误 - ${responseData['msg']}', tag: 'KRSiteConfigService');
// API
return false; return false;
} }
} else { } else {
KRLogUtil.kr_e('❌ HTTP错误 - ${response.statusCode}', tag: 'KRSiteConfigService'); KRLogUtil.kr_e('❌ HTTP错误 - ${response.statusCode}', tag: 'KRSiteConfigService');
return false; // HTTP 404, 500
// catch
throw DioException(
requestOptions: response.requestOptions,
response: response,
type: DioExceptionType.badResponse,
error: 'HTTP Error ${response.statusCode}',
);
} }
} on DioException catch (e, stackTrace) { } on DioException catch (e, stackTrace) {
if (kDebugMode) { if (kDebugMode) {
print('❌ Dio请求异常: ${e.type}'); print('❌ Dio请求异常: ${e.type}');
} }
if (kDebugMode) { KRLogUtil.kr_e('❌ Dio异常 - ${e.type}: ${e.message}', tag: 'KRSiteConfigService');
print('❌ 错误信息: ${e.message}');
//
if (e.type == DioExceptionType.connectionTimeout ||
e.type == DioExceptionType.receiveTimeout ||
e.type == DioExceptionType.sendTimeout ||
e.type == DioExceptionType.connectionError ||
e.type == DioExceptionType.unknown || // unknown
e.type == DioExceptionType.badResponse) { // 503
KRLogUtil.kr_w('⚠️ 网络或服务器异常,尝试切换域名重试...', tag: 'KRSiteConfigService');
//
final switchSuccess = await KRDomain.kr_switchToNextDomain();
if (switchSuccess) {
retryCount++;
KRLogUtil.kr_i('✅ 域名切换成功,准备第 ${retryCount + 1} 次尝试', tag: 'KRSiteConfigService');
continue; //
} else {
KRLogUtil.kr_e('❌ 域名切换失败,无法继续重试', tag: 'KRSiteConfigService');
return false;
} }
if (kDebugMode) {
print('❌ 请求URL: ${e.requestOptions.uri}');
}
if (kDebugMode) {
print('❌ 连接超时: ${e.requestOptions.connectTimeout}');
}
if (kDebugMode) {
print('❌ 发送超时: ${e.requestOptions.sendTimeout}');
}
if (kDebugMode) {
print('❌ 接收超时: ${e.requestOptions.receiveTimeout}');
}
if (e.response != null) {
if (kDebugMode) {
print('❌ 响应状态码: ${e.response?.statusCode}');
}
if (kDebugMode) {
print('❌ 响应数据: ${e.response?.data}');
}
}
if (kDebugMode) {
print('📚 堆栈跟踪: $stackTrace');
} }
KRLogUtil.kr_e('❌ Dio异常 - ${e.type}: ${e.message}', tag: 'KRSiteConfigService'); //
KRLogUtil.kr_e('📚 堆栈: $stackTrace', tag: 'KRSiteConfigService'); KRLogUtil.kr_e('📚 堆栈: $stackTrace', tag: 'KRSiteConfigService');
return false; return false;
} catch (e, stackTrace) { } catch (e, stackTrace) {
if (kDebugMode) { if (kDebugMode) {
print('❌ 未知异常: $e'); print('❌ 未知异常: $e');
} }
if (kDebugMode) {
print('📚 堆栈跟踪: $stackTrace');
}
KRLogUtil.kr_e('❌ 初始化失败 - $e', tag: 'KRSiteConfigService'); KRLogUtil.kr_e('❌ 初始化失败 - $e', tag: 'KRSiteConfigService');
KRLogUtil.kr_e('📚 堆栈: $stackTrace', tag: 'KRSiteConfigService'); KRLogUtil.kr_e('📚 堆栈: $stackTrace', tag: 'KRSiteConfigService');
return false; return false;
} }
} }
KRLogUtil.kr_e('❌ 达到最大重试次数 ($maxRetries),初始化失败', tag: 'KRSiteConfigService');
return false;
}
/// ///
void _printConfigInfo() { void _printConfigInfo() {
if (_siteConfig == null) return; if (_siteConfig == null) return;

View File

@ -689,6 +689,23 @@ class KRSingBoxImp {
List<Map<String, dynamic>> _kr_buildHiddifyRules() { List<Map<String, dynamic>> _kr_buildHiddifyRules() {
final rules = <Map<String, dynamic>>[]; final rules = <Map<String, dynamic>>[];
rules.add({"domains": "domain:api.hifast.biz", "outbound": "bypass"}); rules.add({"domains": "domain:api.hifast.biz", "outbound": "bypass"});
// 使 domain:crisp.chat ()
rules.add({"domains": "domain:crisp.chat", "outbound": "bypass"});
// sing-box relay
rules.add({"domains": "domain:client.relay.crisp.chat", "outbound": "bypass"});
// 🔧 ()
// 使 Set
final baseDomains = KRDomain.kr_baseDomains.toSet();
KRLogUtil.kr_i('🔄 将 ${baseDomains.length} 个动态域名加入直连规则: $baseDomains', tag: 'SingBox');
for (final domain in baseDomains) {
if (domain.isNotEmpty) {
// Set去重了
// sing-box
rules.add({"domains": "domain:$domain", "outbound": "bypass"});
}
}
final nodeDomains = _kr_collectNodeDomains(); final nodeDomains = _kr_collectNodeDomains();
for (final d in nodeDomains) { for (final d in nodeDomains) {

View File

@ -60,6 +60,7 @@ class _HICollapsibleItemWidgetState extends State<HICollapsibleItemWidget> {
text: linkText, text: linkText,
style: const TextStyle( style: const TextStyle(
color: const Color(0xFFADFF5B), // color: const Color(0xFFADFF5B), //
fontFamily: 'AlibabaPuHuiTi-Regular',
), ),
recognizer: TapGestureRecognizer() recognizer: TapGestureRecognizer()
..onTap = () async { ..onTap = () async {