新增日志全局开关便于调试,优化部分机型可能出现的界面错乱或不显示等问题
(cherry picked from commit 5853ba7fe4e0cbe4f04b20c86e9fd84c5557139f)
This commit is contained in:
parent
cf297caf09
commit
17b3f6b92d
@ -1,4 +1,4 @@
|
|||||||
org.gradle.jvmargs=-Xmx4048m -Dfile.encoding=UTF-8
|
org.gradle.jvmargs=-Xlint:-options
|
||||||
android.useAndroidX=true
|
android.useAndroidX=true
|
||||||
android.enableJetifier=true
|
android.enableJetifier=true
|
||||||
# org.gradle.java.home=/Users/mac/Library/Java/JavaVirtualMachines/ms-17.0.16/Contents/Home
|
# org.gradle.java.home=/Users/mac/Library/Java/JavaVirtualMachines/ms-17.0.16/Contents/Home
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import '../utils/kr_update_util.dart';
|
|||||||
import '../utils/kr_secure_storage.dart';
|
import '../utils/kr_secure_storage.dart';
|
||||||
import '../utils/kr_log_util.dart';
|
import '../utils/kr_log_util.dart';
|
||||||
import '../services/singbox_imp/kr_sing_box_imp.dart';
|
import '../services/singbox_imp/kr_sing_box_imp.dart';
|
||||||
|
import '../utils/kr_init_log_collector.dart'; // 🔧 新增:导入日志收集器
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
@ -1337,10 +1338,17 @@ class AppConfig {
|
|||||||
|
|
||||||
KRUpdateApplication? kr_update_application;
|
KRUpdateApplication? kr_update_application;
|
||||||
|
|
||||||
|
// 🔧 新增:日志收集器实例
|
||||||
|
final _initLog = KRInitLogCollector();
|
||||||
|
|
||||||
Future<void> initConfig({
|
Future<void> initConfig({
|
||||||
Future<void> Function()? onSuccess,
|
Future<void> Function()? onSuccess,
|
||||||
}) async {
|
}) async {
|
||||||
|
_initLog.logSeparator();
|
||||||
|
_initLog.log('🌐 开始应用配置初始化(域名加载)', tag: 'Domain');
|
||||||
|
|
||||||
if (_isInitializing) {
|
if (_isInitializing) {
|
||||||
|
_initLog.logWarning('配置初始化已在进行中,跳过重复调用', tag: 'Domain');
|
||||||
KRLogUtil.kr_w('配置初始化已在进行中,跳过重复调用', tag: 'AppConfig');
|
KRLogUtil.kr_w('配置初始化已在进行中,跳过重复调用', tag: 'AppConfig');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1348,10 +1356,13 @@ class AppConfig {
|
|||||||
_isInitializing = true;
|
_isInitializing = true;
|
||||||
try {
|
try {
|
||||||
// 🔧 修复6:启动时优先加载上次成功的域名
|
// 🔧 修复6:启动时优先加载上次成功的域名
|
||||||
|
_initLog.log('开始加载基础域名配置', tag: 'Domain');
|
||||||
await KRDomain.kr_loadBaseDomain();
|
await KRDomain.kr_loadBaseDomain();
|
||||||
|
_initLog.logSuccess('当前使用域名: ${KRDomain.kr_currentDomain}', tag: 'Domain');
|
||||||
KRLogUtil.kr_i('📍 当前使用域名: ${KRDomain.kr_currentDomain}', tag: 'AppConfig');
|
KRLogUtil.kr_i('📍 当前使用域名: ${KRDomain.kr_currentDomain}', tag: 'AppConfig');
|
||||||
|
|
||||||
// 所有模式都走正常的配置请求流程
|
// 所有模式都走正常的配置请求流程
|
||||||
|
_initLog.log('开始配置请求流程(包含重试机制)', tag: 'Domain');
|
||||||
KRLogUtil.kr_i('🚀 开始配置初始化', tag: 'AppConfig');
|
KRLogUtil.kr_i('🚀 开始配置初始化', tag: 'AppConfig');
|
||||||
await _startAutoRetry(onSuccess);
|
await _startAutoRetry(onSuccess);
|
||||||
} finally {
|
} finally {
|
||||||
@ -1402,24 +1413,32 @@ class AppConfig {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_initLog.log('发起配置请求 API (尝试 $totalAttempts/$maxTotalAttempts)', tag: 'Domain');
|
||||||
final result = await _kr_userApi.kr_config();
|
final result = await _kr_userApi.kr_config();
|
||||||
result.fold(
|
result.fold(
|
||||||
(error) async {
|
(error) async {
|
||||||
|
_initLog.logError('配置请求失败 (重试 $currentRetryCount/$kr_maxRetryCount)', tag: 'Domain', error: error);
|
||||||
KRLogUtil.kr_e('配置初始化失败: $error', tag: 'AppConfig');
|
KRLogUtil.kr_e('配置初始化失败: $error', tag: 'AppConfig');
|
||||||
currentRetryCount++;
|
currentRetryCount++;
|
||||||
|
|
||||||
// 计算重试延迟时间
|
// 计算重试延迟时间
|
||||||
final retryDelay = (kr_retryInterval * pow(kr_backoffFactor, currentRetryCount)).toInt();
|
final retryDelay = (kr_retryInterval * pow(kr_backoffFactor, currentRetryCount)).toInt();
|
||||||
|
|
||||||
// 尝试切换域名
|
|
||||||
await KRDomain.kr_switchToNextDomain();
|
|
||||||
|
|
||||||
// 等待后重试,至少延迟100ms避免立即重试
|
|
||||||
final actualDelay = max(retryDelay, 100);
|
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 Future.delayed(Duration(milliseconds: actualDelay));
|
||||||
await executeConfigRequest();
|
await executeConfigRequest();
|
||||||
},
|
},
|
||||||
(config) async {
|
(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();
|
_retryTimer?.cancel();
|
||||||
currentRetryCount = 0;
|
currentRetryCount = 0;
|
||||||
|
|
||||||
|
|||||||
@ -2,6 +2,7 @@ import 'dart:async';
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:path_provider/path_provider.dart';
|
||||||
import 'package:flutter_map/flutter_map.dart';
|
import 'package:flutter_map/flutter_map.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:kaer_with_panels/app/common/app_run_data.dart';
|
import 'package:kaer_with_panels/app/common/app_run_data.dart';
|
||||||
@ -30,8 +31,11 @@ import 'package:kaer_with_panels/app/utils/kr_common_util.dart';
|
|||||||
import 'package:kaer_with_panels/app/utils/kr_secure_storage.dart';
|
import 'package:kaer_with_panels/app/utils/kr_secure_storage.dart';
|
||||||
import 'package:kaer_with_panels/app/services/singbox_imp/kr_sing_box_imp.dart';
|
import 'package:kaer_with_panels/app/services/singbox_imp/kr_sing_box_imp.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
|
import 'package:kaer_with_panels/app/utils/kr_init_log_collector.dart'; // 🔧 新增:导入日志收集器
|
||||||
|
|
||||||
class KRHomeController extends GetxController with WidgetsBindingObserver {
|
class KRHomeController extends GetxController with WidgetsBindingObserver {
|
||||||
|
// 🔧 新增:日志收集器实例
|
||||||
|
final _initLog = KRInitLogCollector();
|
||||||
/// 订阅服务
|
/// 订阅服务
|
||||||
final KRSubscribeService kr_subscribeService = KRSubscribeService();
|
final KRSubscribeService kr_subscribeService = KRSubscribeService();
|
||||||
|
|
||||||
@ -278,16 +282,20 @@ class KRHomeController extends GetxController with WidgetsBindingObserver {
|
|||||||
|
|
||||||
|
|
||||||
void _kr_initLoginStatus() {
|
void _kr_initLoginStatus() {
|
||||||
|
_initLog.log('开始初始化登录状态处理', tag: 'Home');
|
||||||
KRLogUtil.kr_i('初始化登录状态', tag: 'HomeController');
|
KRLogUtil.kr_i('初始化登录状态', tag: 'HomeController');
|
||||||
|
|
||||||
// 🔧 Android 15 紧急修复:8秒超时,更快响应移动网络慢的情况
|
// 🔧 Android 15 紧急修复:8秒超时,更快响应移动网络慢的情况
|
||||||
Timer(const Duration(seconds: 8), () {
|
Timer(const Duration(seconds: 8), () {
|
||||||
if (kr_currentListStatus.value == KRHomeViewsListStatus.kr_loading) {
|
if (kr_currentListStatus.value == KRHomeViewsListStatus.kr_loading) {
|
||||||
|
_initLog.logWarning('⏱️ 订阅加载超时(8秒保护),强制设置为无数据状态', tag: 'Subscribe');
|
||||||
|
_initLog.log('当前列表状态仍为: loading,触发超时保护', tag: 'Subscribe');
|
||||||
KRLogUtil.kr_w('⏱️ 订阅服务初始化超时(8秒),强制设置为无数据状态', tag: 'HomeController');
|
KRLogUtil.kr_w('⏱️ 订阅服务初始化超时(8秒),强制设置为无数据状态', tag: 'HomeController');
|
||||||
// 🔧 Android 15 优化:超时设置为 none 而非 error,避免底部面板显示错误界面
|
// 🔧 Android 15 优化:超时设置为 none 而非 error,避免底部面板显示错误界面
|
||||||
kr_currentListStatus.value = KRHomeViewsListStatus.kr_none;
|
kr_currentListStatus.value = KRHomeViewsListStatus.kr_none;
|
||||||
// 强制更新底部面板高度,确保显示正常
|
// 强制更新底部面板高度,确保显示正常
|
||||||
kr_updateBottomPanelHeight();
|
kr_updateBottomPanelHeight();
|
||||||
|
_initLog.log('已强制切换到默认视图, 底部面板高度: ${kr_bottomPanelHeight.value}', tag: 'Subscribe');
|
||||||
KRLogUtil.kr_i('✅ 已强制切换到默认视图', tag: 'HomeController');
|
KRLogUtil.kr_i('✅ 已强制切换到默认视图', tag: 'HomeController');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -295,6 +303,7 @@ class KRHomeController extends GetxController with WidgetsBindingObserver {
|
|||||||
// 🔧 Android 15 新增:3秒警告,帮助诊断
|
// 🔧 Android 15 新增:3秒警告,帮助诊断
|
||||||
Timer(const Duration(seconds: 3), () {
|
Timer(const Duration(seconds: 3), () {
|
||||||
if (kr_currentListStatus.value == KRHomeViewsListStatus.kr_loading) {
|
if (kr_currentListStatus.value == KRHomeViewsListStatus.kr_loading) {
|
||||||
|
_initLog.logWarning('⚠️ 订阅服务已加载3秒,网络可能较慢', tag: 'Subscribe');
|
||||||
KRLogUtil.kr_w('⚠️ 订阅服务初始化已耗时3秒,可能网络较慢', tag: 'HomeController');
|
KRLogUtil.kr_w('⚠️ 订阅服务初始化已耗时3秒,可能网络较慢', tag: 'HomeController');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@ -66,12 +66,22 @@ class KRHomeBottomPanel extends GetView<KRHomeController> {
|
|||||||
final isNotLoggedIn = controller.kr_currentViewStatus.value ==
|
final isNotLoggedIn = controller.kr_currentViewStatus.value ==
|
||||||
KRHomeViewsStatus.kr_notLoggedIn;
|
KRHomeViewsStatus.kr_notLoggedIn;
|
||||||
|
|
||||||
KRLogUtil.kr_i('构建默认视图', tag: 'HomeBottomPanel');
|
KRLogUtil.kr_i('=' * 60, tag: 'HomeBottomPanel');
|
||||||
|
KRLogUtil.kr_i('🎨 构建默认视图', tag: 'HomeBottomPanel');
|
||||||
KRLogUtil.kr_i('是否未登录: $isNotLoggedIn', tag: 'HomeBottomPanel');
|
KRLogUtil.kr_i('是否未登录: $isNotLoggedIn', tag: 'HomeBottomPanel');
|
||||||
KRLogUtil.kr_i('是否有有效订阅: $hasValidSubscription', tag: 'HomeBottomPanel');
|
KRLogUtil.kr_i('是否有有效订阅: $hasValidSubscription', tag: 'HomeBottomPanel');
|
||||||
|
KRLogUtil.kr_i('订阅列表数量: ${controller.kr_subscribeService.kr_availableSubscribes.length}', tag: 'HomeBottomPanel');
|
||||||
|
KRLogUtil.kr_i('当前选中订阅: ${controller.kr_subscribeService.kr_currentSubscribe.value?.name ?? "null"}', tag: 'HomeBottomPanel');
|
||||||
KRLogUtil.kr_i('是否试用: $isTrial', tag: 'HomeBottomPanel');
|
KRLogUtil.kr_i('是否试用: $isTrial', tag: 'HomeBottomPanel');
|
||||||
KRLogUtil.kr_i('当前高度: ${controller.kr_bottomPanelHeight.value}',
|
KRLogUtil.kr_i('当前高度: ${controller.kr_bottomPanelHeight.value}', tag: 'HomeBottomPanel');
|
||||||
tag: 'HomeBottomPanel');
|
|
||||||
|
// 🔧 新增:详细的 UI 渲染决策日志
|
||||||
|
if (hasValidSubscription) {
|
||||||
|
KRLogUtil.kr_i('✅ 将渲染: 连接信息卡片 (KRHomeConnectionInfoView)', tag: 'HomeBottomPanel');
|
||||||
|
} else {
|
||||||
|
KRLogUtil.kr_i('✅ 将渲染: 订阅卡片 (KRSubscriptionCard) - 开通会员界面', tag: 'HomeBottomPanel');
|
||||||
|
}
|
||||||
|
KRLogUtil.kr_i('=' * 60, tag: 'HomeBottomPanel');
|
||||||
|
|
||||||
// 🔧 关键修复:统一布局逻辑,确保无论登录状态如何都显示完整UI
|
// 🔧 关键修复:统一布局逻辑,确保无论登录状态如何都显示完整UI
|
||||||
return Column(
|
return Column(
|
||||||
@ -86,16 +96,22 @@ class KRHomeBottomPanel extends GetView<KRHomeController> {
|
|||||||
// 🔧 核心修复:无论登录状态,都显示核心卡片(订阅或连接信息)
|
// 🔧 核心修复:无论登录状态,都显示核心卡片(订阅或连接信息)
|
||||||
if (hasValidSubscription)
|
if (hasValidSubscription)
|
||||||
// 已订阅:显示连接信息卡片
|
// 已订阅:显示连接信息卡片
|
||||||
Container(
|
Builder(builder: (context) {
|
||||||
margin: EdgeInsets.only(top: 12.h),
|
KRLogUtil.kr_i('🔹 渲染连接信息卡片,margin top: ${12.h}', tag: 'HomeBottomPanel');
|
||||||
child: const KRHomeConnectionInfoView(),
|
return Container(
|
||||||
)
|
margin: EdgeInsets.only(top: 12.h),
|
||||||
|
child: const KRHomeConnectionInfoView(),
|
||||||
|
);
|
||||||
|
})
|
||||||
else
|
else
|
||||||
// 未订阅(包括未登录):始终显示订阅卡片
|
// 未订阅(包括未登录):始终显示订阅卡片
|
||||||
Container(
|
Builder(builder: (context) {
|
||||||
margin: EdgeInsets.only(top: 12.h, left: 12.w, right: 12.w),
|
KRLogUtil.kr_i('🔹 渲染订阅卡片,margin: top=${12.h}, left=${12.w}, right=${12.w}', tag: 'HomeBottomPanel');
|
||||||
child: const KRSubscriptionCard(),
|
return Container(
|
||||||
),
|
margin: EdgeInsets.only(top: 12.h, left: 12.w, right: 12.w),
|
||||||
|
child: const KRSubscriptionCard(),
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
|
||||||
// 2. 如果已订阅且是试用,展示试用卡片
|
// 2. 如果已订阅且是试用,展示试用卡片
|
||||||
if (hasValidSubscription && isTrial)
|
if (hasValidSubscription && isTrial)
|
||||||
|
|||||||
@ -24,10 +24,25 @@ class KRSubscriptionCard extends StatelessWidget {
|
|||||||
|
|
||||||
// 构建订阅卡片
|
// 构建订阅卡片
|
||||||
Widget _kr_buildSubscriptionCard(BuildContext context) {
|
Widget _kr_buildSubscriptionCard(BuildContext context) {
|
||||||
|
// 🔧 新增:订阅卡片渲染日志
|
||||||
|
print('🎴 [SubscriptionCard] 开始构建订阅卡片');
|
||||||
|
print('🎴 [SubscriptionCard] 卡片颜色: ${Theme.of(context).cardColor}');
|
||||||
|
print('🎴 [SubscriptionCard] 主题亮度: ${Theme.of(context).brightness}');
|
||||||
|
print('🎴 [SubscriptionCard] 文本颜色: ${Theme.of(context).textTheme.bodyMedium?.color}');
|
||||||
|
print('🎴 [SubscriptionCard] ScreenUtil - 12.w=${12.w}, 16.h=${16.h}, 44.w=${44.w}');
|
||||||
|
|
||||||
|
// 🔧 关键修复:添加最小高度约束和调试边框
|
||||||
return Container(
|
return Container(
|
||||||
|
// 添加最小高度,确保卡片可见
|
||||||
|
constraints: const BoxConstraints(minHeight: 180),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: Theme.of(context).cardColor,
|
color: Theme.of(context).cardColor,
|
||||||
borderRadius: BorderRadius.circular(12.w),
|
borderRadius: BorderRadius.circular(12.w),
|
||||||
|
// 🔧 添加边框用于调试可见性
|
||||||
|
border: Border.all(
|
||||||
|
color: Colors.blue.withOpacity(0.3),
|
||||||
|
width: 2,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
@ -55,7 +70,10 @@ class KRSubscriptionCard extends StatelessWidget {
|
|||||||
style: KrAppTextStyle(
|
style: KrAppTextStyle(
|
||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
fontWeight: FontWeight.w400,
|
fontWeight: FontWeight.w400,
|
||||||
color: Theme.of(context).textTheme.bodyMedium?.color,
|
// 🔧 关键修复:确保文本颜色可见
|
||||||
|
color: Theme.of(context).brightness == Brightness.dark
|
||||||
|
? Colors.white
|
||||||
|
: Colors.black87,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
import 'package:flutter/foundation.dart' show kDebugMode;
|
||||||
import 'package:kaer_with_panels/app/modules/kr_home/controllers/kr_home_controller.dart';
|
import 'package:kaer_with_panels/app/modules/kr_home/controllers/kr_home_controller.dart';
|
||||||
import 'package:kaer_with_panels/app/modules/kr_invite/controllers/kr_invite_controller.dart';
|
import 'package:kaer_with_panels/app/modules/kr_invite/controllers/kr_invite_controller.dart';
|
||||||
import 'package:kaer_with_panels/app/modules/kr_login/controllers/kr_login_controller.dart';
|
import 'package:kaer_with_panels/app/modules/kr_login/controllers/kr_login_controller.dart';
|
||||||
@ -10,15 +11,40 @@ import '../controllers/kr_main_controller.dart';
|
|||||||
class KRMainBinding extends Bindings {
|
class KRMainBinding extends Bindings {
|
||||||
@override
|
@override
|
||||||
void dependencies() {
|
void dependencies() {
|
||||||
|
if (kDebugMode) {
|
||||||
|
print('🔧 KRMainBinding.dependencies 被调用');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 🔧 MainController 仍然使用 lazyPut,因为它由 MainView 触发
|
||||||
Get.lazyPut<KRMainController>(
|
Get.lazyPut<KRMainController>(
|
||||||
() => KRMainController(),
|
() {
|
||||||
|
if (kDebugMode) {
|
||||||
|
print('🏗️ 创建 KRMainController 实例');
|
||||||
|
}
|
||||||
|
return KRMainController();
|
||||||
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
Get.lazyPut(() => KRHomeController());
|
// 🔧 关键修复:使用 lazyPut 但设置为单例,避免重复创建
|
||||||
Get.lazyPut(() => KRLoginController());
|
// fenix: true 允许控制器在被删除后重新创建
|
||||||
|
// 使用 lazyPut 让 HomeController 在真正需要时才创建,避免过早初始化导致资源冲突
|
||||||
|
Get.lazyPut<KRHomeController>(
|
||||||
|
() {
|
||||||
|
if (kDebugMode) {
|
||||||
|
print('🏗️ 创建 KRHomeController 实例(仅此一次)');
|
||||||
|
}
|
||||||
|
return KRHomeController();
|
||||||
|
},
|
||||||
|
fenix: true,
|
||||||
|
);
|
||||||
|
|
||||||
|
Get.lazyPut(() => KRLoginController());
|
||||||
Get.lazyPut(() => KRInviteController());
|
Get.lazyPut(() => KRInviteController());
|
||||||
Get.lazyPut(() => KRUserInfoController());
|
Get.lazyPut(() => KRUserInfoController());
|
||||||
Get.lazyPut(() => KRStatisticsController());
|
Get.lazyPut(() => KRStatisticsController());
|
||||||
|
|
||||||
|
if (kDebugMode) {
|
||||||
|
print('✅ KRMainBinding.dependencies 完成');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
|
import 'package:flutter/foundation.dart' show kDebugMode;
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:kaer_with_panels/app/modules/kr_home/views/kr_home_view.dart';
|
import 'package:kaer_with_panels/app/modules/kr_home/views/kr_home_view.dart';
|
||||||
import 'package:kaer_with_panels/app/modules/kr_invite/views/kr_invite_view.dart';
|
import 'package:kaer_with_panels/app/modules/kr_invite/views/kr_invite_view.dart';
|
||||||
@ -30,19 +31,33 @@ class KRMainController extends GetxController {
|
|||||||
static KRMainController get to => Get.find();
|
static KRMainController get to => Get.find();
|
||||||
DateTime? lastPopTime;
|
DateTime? lastPopTime;
|
||||||
var kr_currentIndex = 0.obs;
|
var kr_currentIndex = 0.obs;
|
||||||
final List<Widget> widgets = [
|
|
||||||
KRKeepAliveWrapper(KRHomeView()),
|
late final List<Widget> widgets;
|
||||||
KRKeepAliveWrapper(KRInviteView()),
|
|
||||||
KRKeepAliveWrapper(KRStatisticsView()),
|
|
||||||
KRKeepAliveWrapper(KRUserInfoView()),
|
|
||||||
];
|
|
||||||
|
|
||||||
/// 分页控制器
|
/// 分页控制器
|
||||||
PageController pageController = PageController(keepPage: true);
|
PageController pageController = PageController(keepPage: true);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
super.onInit();
|
super.onInit();
|
||||||
|
|
||||||
|
// 🔧 诊断:在 onInit 中创建 widgets 列表
|
||||||
|
if (kDebugMode) {
|
||||||
|
print('🎬 KRMainController.onInit 被调用');
|
||||||
|
print('📝 开始创建 widgets 列表...');
|
||||||
|
}
|
||||||
|
|
||||||
|
widgets = [
|
||||||
|
KRKeepAliveWrapper(KRHomeView()),
|
||||||
|
KRKeepAliveWrapper(KRInviteView()),
|
||||||
|
KRKeepAliveWrapper(KRStatisticsView()),
|
||||||
|
KRKeepAliveWrapper(KRUserInfoView()),
|
||||||
|
];
|
||||||
|
|
||||||
|
if (kDebugMode) {
|
||||||
|
print('✅ widgets 列表创建完成,包含 ${widgets.length} 个页面');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -517,10 +517,12 @@ class KRSplashController extends GetxController {
|
|||||||
_initLog.log('Token存在: $hasToken', tag: 'Splash');
|
_initLog.log('Token存在: $hasToken', tag: 'Splash');
|
||||||
_initLog.logSuccess('正常初始化流程完成', tag: 'Splash');
|
_initLog.logSuccess('正常初始化流程完成', tag: 'Splash');
|
||||||
|
|
||||||
// 完成日志收集
|
// 🔧 关键修复:不要在这里关闭日志文件!
|
||||||
await _initLog.finalize();
|
// 日志文件需要保持打开状态,让 HomeController 也能写入日志
|
||||||
|
// 日志文件将在 HomeController 初始化完成后关闭
|
||||||
|
// await _initLog.finalize(); // ❌ 注释掉
|
||||||
if (kDebugMode && _initLog.getLogFilePath() != null) {
|
if (kDebugMode && _initLog.getLogFilePath() != null) {
|
||||||
print('📁 初始化日志文件: ${_initLog.getLogFilePath()}');
|
print('📁 初始化日志文件(保持打开): ${_initLog.getLogFilePath()}');
|
||||||
}
|
}
|
||||||
|
|
||||||
// 直接导航到主页(无论是否登录,主页会根据登录状态显示不同内容)
|
// 直接导航到主页(无论是否登录,主页会根据登录状态显示不同内容)
|
||||||
@ -549,8 +551,8 @@ class KRSplashController extends GetxController {
|
|||||||
kr_hasError.value = true;
|
kr_hasError.value = true;
|
||||||
kr_errorMessage.value = '${AppTranslations.kr_splash.kr_initializationFailed}$e';
|
kr_errorMessage.value = '${AppTranslations.kr_splash.kr_initializationFailed}$e';
|
||||||
|
|
||||||
// 完成日志收集
|
// 🔧 错误情况下也不关闭日志,让后续的错误处理也能写入
|
||||||
await _initLog.finalize();
|
// await _initLog.finalize(); // ❌ 注释掉
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -66,7 +66,7 @@ class AppPages {
|
|||||||
),
|
),
|
||||||
GetPage(
|
GetPage(
|
||||||
name: _Paths.KR_HOME,
|
name: _Paths.KR_HOME,
|
||||||
page: () => const KRHomeView(),
|
page: () => KRHomeView(),
|
||||||
binding: KRHomeBinding(),
|
binding: KRHomeBinding(),
|
||||||
arguments: {'showSubscriptionButton': true}, // 显示购买按钮
|
arguments: {'showSubscriptionButton': true}, // 显示购买按钮
|
||||||
customTransition: SlideOutOnlyTransition(
|
customTransition: SlideOutOnlyTransition(
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user