feat: 更新代码仓库全部修改
Build Android APK / 编译 libcore.aar (push) Has been cancelled
Build Android APK / 编译 Android APK (release) (push) Has been cancelled
Build Android APK / 创建 GitHub Release (push) Has been cancelled
Build Multi-Platform / 编译 libcore (Android) (push) Has been cancelled
Build Multi-Platform / 编译 libcore (Windows) (push) Has been cancelled
Build Multi-Platform / 编译 libcore (macOS) (push) Has been cancelled
Build Multi-Platform / 编译 libcore (Linux) (push) Has been cancelled
Build Multi-Platform / 构建 Android APK (push) Has been cancelled
Build Multi-Platform / 构建 Windows (push) Has been cancelled
Build Multi-Platform / 构建 macOS (push) Has been cancelled
Build Multi-Platform / 构建 Linux (push) Has been cancelled
Build Multi-Platform / 创建 Release (push) Has been cancelled
Build Windows / build (push) Has been cancelled
Build Android APK / 编译 libcore.aar (push) Has been cancelled
Build Android APK / 编译 Android APK (release) (push) Has been cancelled
Build Android APK / 创建 GitHub Release (push) Has been cancelled
Build Multi-Platform / 编译 libcore (Android) (push) Has been cancelled
Build Multi-Platform / 编译 libcore (Windows) (push) Has been cancelled
Build Multi-Platform / 编译 libcore (macOS) (push) Has been cancelled
Build Multi-Platform / 编译 libcore (Linux) (push) Has been cancelled
Build Multi-Platform / 构建 Android APK (push) Has been cancelled
Build Multi-Platform / 构建 Windows (push) Has been cancelled
Build Multi-Platform / 构建 macOS (push) Has been cancelled
Build Multi-Platform / 构建 Linux (push) Has been cancelled
Build Multi-Platform / 创建 Release (push) Has been cancelled
Build Windows / build (push) Has been cancelled
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'dart:convert';
|
||||
|
||||
import 'dart:io' show Platform;
|
||||
import 'dart:math';
|
||||
@@ -12,8 +13,15 @@ import 'package:kaer_with_panels/app/services/kr_site_config_service.dart';
|
||||
import 'package:kaer_with_panels/app/services/kr_device_info_service.dart';
|
||||
import 'package:kaer_with_panels/app/services/api_service/kr_auth_api.dart';
|
||||
import 'package:kaer_with_panels/app/model/enum/kr_request_type.dart';
|
||||
import 'package:kaer_with_panels/app/utils/kr_secure_storage.dart';
|
||||
import 'package:kaer_with_panels/app/services/kr_subscribe_service.dart';
|
||||
import 'package:kaer_with_panels/app/widgets/dialogs/hi_dialog.dart';
|
||||
import 'package:kaer_with_panels/app/widgets/kr_app_text_style.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:kaer_with_panels/app/localization/app_translations.dart';
|
||||
import 'package:kaer_with_panels/app/modules/kr_home/controllers/kr_home_controller.dart';
|
||||
import 'package:kaer_with_panels/app/modules/kr_home/models/kr_home_views_status.dart';
|
||||
import 'dart:async';
|
||||
|
||||
class KRSplashController extends GetxController {
|
||||
@@ -26,6 +34,9 @@ class KRSplashController extends GetxController {
|
||||
// 错误信息
|
||||
final RxString kr_errorMessage = ''.obs;
|
||||
|
||||
/// 订阅服务
|
||||
final KRSubscribeService kr_subscribeService = KRSubscribeService();
|
||||
|
||||
// 倒计时
|
||||
// final count = 0.obs;
|
||||
// 是否正在加载
|
||||
@@ -33,49 +44,73 @@ class KRSplashController extends GetxController {
|
||||
// // 是否初始化成功
|
||||
// final isInitialized = false.obs;
|
||||
|
||||
// 启动开始时间(用于计算总耗时)
|
||||
late final DateTime _startTime;
|
||||
late DateTime _stepStartTime;
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
|
||||
// 记录启动开始时间
|
||||
_startTime = DateTime.now();
|
||||
_stepStartTime = _startTime;
|
||||
|
||||
// 使用 print 确保日志一定会输出
|
||||
print('═══════════════════════════════════════');
|
||||
print('🎬 KRSplashController onInit 被调用了!');
|
||||
print('═══════════════════════════════════════');
|
||||
print('[SPLASH_TIMING] ═══════════════════════════════════════');
|
||||
print('[SPLASH_TIMING] 🎬 KRSplashController onInit 被调用了!');
|
||||
print('[SPLASH_TIMING] ⏰ 启动开始时间: ${_startTime.toIso8601String()}');
|
||||
print('[SPLASH_TIMING] ═══════════════════════════════════════');
|
||||
|
||||
KRLogUtil.kr_i('═══════════════════════════════════════', tag: 'SplashController');
|
||||
KRLogUtil.kr_i('🎬 启动页控制器 onInit', tag: 'SplashController');
|
||||
KRLogUtil.kr_i('═══════════════════════════════════════', tag: 'SplashController');
|
||||
KRLogUtil.kr_i('[SPLASH_TIMING] ═══════════════════════════════════════', tag: 'SplashController');
|
||||
KRLogUtil.kr_i('[SPLASH_TIMING] 🎬 启动页控制器 onInit', tag: 'SplashController');
|
||||
KRLogUtil.kr_i('[SPLASH_TIMING] ═══════════════════════════════════════', tag: 'SplashController');
|
||||
|
||||
// 立即初始化网站配置(在任何其他逻辑之前)
|
||||
print('🌐 准备调用 _kr_initSiteConfig...');
|
||||
// 必须等待网站配置和设备登录完成后,再进行后续初始化
|
||||
// 异步初始化网站配置
|
||||
_kr_initSiteConfig().then((_) {
|
||||
print('🔧 网站配置完成,开始调用 _kr_initialize...');
|
||||
_kr_initialize();
|
||||
});
|
||||
}
|
||||
|
||||
/// 初始化网站配置(最优先执行)
|
||||
Future<void> _kr_initSiteConfig() async {
|
||||
print('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
||||
print('🌐 【最优先】开始初始化网站配置...');
|
||||
print('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
||||
// 记录步骤耗时的辅助方法
|
||||
void _logStepTiming(String stepName) {
|
||||
final now = DateTime.now();
|
||||
final stepDuration = now.difference(_stepStartTime);
|
||||
final totalDuration = now.difference(_startTime);
|
||||
final stepMs = stepDuration.inMilliseconds;
|
||||
final totalMs = totalDuration.inMilliseconds;
|
||||
|
||||
print('[SPLASH_TIMING] ⏱️ $stepName 耗时: ${stepMs}ms | 累计: ${totalMs}ms');
|
||||
KRLogUtil.kr_i('[SPLASH_TIMING] ⏱️ $stepName 耗时: ${stepMs}ms | 累计: ${totalMs}ms', tag: 'SplashController');
|
||||
|
||||
_stepStartTime = now; // 更新步骤开始时间
|
||||
}
|
||||
|
||||
KRLogUtil.kr_i('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━', tag: 'SplashController');
|
||||
KRLogUtil.kr_i('🌐 【最优先】初始化网站配置...', tag: 'SplashController');
|
||||
KRLogUtil.kr_i('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━', tag: 'SplashController');
|
||||
/// 初始化网站配置(异步执行)
|
||||
Future<void> _kr_initSiteConfig() async {
|
||||
print('[SPLASH_TIMING] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
||||
print('[SPLASH_TIMING] 🌐 开始初始化网站配置...');
|
||||
print('[SPLASH_TIMING] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
||||
|
||||
KRLogUtil.kr_i('[SPLASH_TIMING] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━', tag: 'SplashController');
|
||||
KRLogUtil.kr_i('[SPLASH_TIMING] 🌐 初始化网站配置...', tag: 'SplashController');
|
||||
KRLogUtil.kr_i('[SPLASH_TIMING] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━', tag: 'SplashController');
|
||||
|
||||
try {
|
||||
print('📞 准备调用 KRSiteConfigService().initialize()...');
|
||||
final success = await KRSiteConfigService().initialize();
|
||||
final crispId = await KRSiteConfigService().getCrispId();
|
||||
print('📞 KRSiteConfigService().initialize() 返回: $success');
|
||||
|
||||
if (success) {
|
||||
print('✅ 网站配置初始化成功');
|
||||
KRLogUtil.kr_i('✅ 网站配置初始化成功', tag: 'SplashController');
|
||||
final config = AppConfig.getInstance();
|
||||
config.kr_website_id = crispId;
|
||||
print('📞 KRSiteConfigService().initialize() 返回: $crispId');
|
||||
print('AppConfig website_id 已更新为: ${config.kr_website_id}');
|
||||
|
||||
// 检查是否支持设备登录
|
||||
await _kr_checkAndPerformDeviceLogin();
|
||||
print('[SPLASH_TIMING] ✅ 网站配置初始化成功');
|
||||
KRLogUtil.kr_i('[SPLASH_TIMING] ✅ 网站配置初始化成功', tag: 'SplashController');
|
||||
} else {
|
||||
print('⚠️ 网站配置初始化失败,将使用默认配置');
|
||||
KRLogUtil.kr_w('⚠️ 网站配置初始化失败,将使用默认配置', tag: 'SplashController');
|
||||
@@ -89,98 +124,57 @@ class KRSplashController extends GetxController {
|
||||
KRLogUtil.kr_i('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━', tag: 'SplashController');
|
||||
}
|
||||
|
||||
/// 检查并执行设备登录
|
||||
Future<void> _kr_checkAndPerformDeviceLogin() async {
|
||||
try {
|
||||
print('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
||||
print('🔍 检查是否支持设备登录...');
|
||||
print('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
||||
|
||||
final siteConfigService = KRSiteConfigService();
|
||||
|
||||
// 检查是否启用设备登录
|
||||
final isDeviceLoginEnabled = siteConfigService.isDeviceLoginEnabled();
|
||||
print('📱 设备登录状态: ${isDeviceLoginEnabled ? "已启用" : "未启用"}');
|
||||
KRLogUtil.kr_i('📱 设备登录状态: $isDeviceLoginEnabled', tag: 'SplashController');
|
||||
|
||||
if (!isDeviceLoginEnabled) {
|
||||
print('⚠️ 设备登录未启用,跳过自动登录');
|
||||
KRLogUtil.kr_w('⚠️ 设备登录未启用', tag: 'SplashController');
|
||||
return;
|
||||
}
|
||||
|
||||
print('✅ 设备登录已启用,开始初始化设备信息...');
|
||||
|
||||
// 初始化设备信息服务
|
||||
await KRDeviceInfoService().initialize();
|
||||
|
||||
print('🔐 开始执行设备登录...');
|
||||
KRLogUtil.kr_i('🔐 开始执行设备登录', tag: 'SplashController');
|
||||
|
||||
// 执行设备登录
|
||||
final authApi = KRAuthApi();
|
||||
final result = await authApi.kr_deviceLogin();
|
||||
|
||||
result.fold(
|
||||
(error) {
|
||||
print('❌ 设备登录失败: ${error.msg}');
|
||||
KRLogUtil.kr_e('❌ 设备登录失败: ${error.msg}', tag: 'SplashController');
|
||||
},
|
||||
(token) async {
|
||||
print('✅ 设备登录成功!');
|
||||
print('🎫 Token: ${token.substring(0, min(20, token.length))}...');
|
||||
KRLogUtil.kr_i('✅ 设备登录成功', tag: 'SplashController');
|
||||
|
||||
// 使用 saveUserInfo 保存完整的用户信息
|
||||
// 设备登录使用特殊的账号标识,登录类型设为邮箱(后续可以绑定真实账号)
|
||||
final deviceId = KRDeviceInfoService().deviceId ?? 'unknown';
|
||||
await KRAppRunData.getInstance().kr_saveUserInfo(
|
||||
token,
|
||||
'device_$deviceId', // 使用设备ID作为临时账号
|
||||
KRLoginType.kr_email, // 默认登录类型
|
||||
null, // 设备登录无需区号
|
||||
);
|
||||
print('💾 用户信息已保存(包括Token)');
|
||||
print('✅ 已标记为登录状态');
|
||||
KRLogUtil.kr_i('✅ 设备登录流程完成', tag: 'SplashController');
|
||||
},
|
||||
);
|
||||
|
||||
print('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
||||
} catch (e, stackTrace) {
|
||||
print('❌ 设备登录检查异常: $e');
|
||||
print('📚 堆栈跟踪: $stackTrace');
|
||||
KRLogUtil.kr_e('❌ 设备登录检查异常: $e', tag: 'SplashController');
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _kr_initialize() async {
|
||||
try {
|
||||
KRLogUtil.kr_i('🔧 开始执行 _kr_initialize', tag: 'SplashController');
|
||||
_logStepTiming('开始主要初始化流程');
|
||||
KRLogUtil.kr_i('[SPLASH_TIMING] 🔧 开始执行 _kr_initialize', tag: 'SplashController');
|
||||
|
||||
// 只在手机端检查网络权限
|
||||
if (Platform.isIOS || Platform.isAndroid) {
|
||||
KRLogUtil.kr_i('📱 移动平台,检查网络权限...', tag: 'SplashController');
|
||||
_logStepTiming('开始网络权限检查');
|
||||
KRLogUtil.kr_i('[SPLASH_TIMING] 📱 移动平台,检查网络权限...', tag: 'SplashController');
|
||||
final bool hasNetworkPermission = await KRNetworkCheck.kr_initialize(
|
||||
Get.context!,
|
||||
onPermissionGranted: () async {
|
||||
_logStepTiming('网络权限检查完成');
|
||||
await _kr_continueInitialization();
|
||||
},
|
||||
);
|
||||
|
||||
if (!hasNetworkPermission) {
|
||||
// 计算网络权限失败时的总耗时
|
||||
final endTime = DateTime.now();
|
||||
final totalDuration = endTime.difference(_startTime);
|
||||
final totalMs = totalDuration.inMilliseconds;
|
||||
|
||||
print('❌ 网络权限失败时间: ${endTime.toIso8601String()}');
|
||||
print('🕐 网络权限失败总耗时: ${totalMs}ms (${totalDuration.inSeconds}.${(totalMs % 1000).toString().padLeft(3, '0')}s)');
|
||||
|
||||
kr_hasError.value = true;
|
||||
kr_errorMessage.value = AppTranslations.kr_splash.kr_networkPermissionFailed;
|
||||
KRLogUtil.kr_e('❌ 网络权限检查失败', tag: 'SplashController');
|
||||
KRLogUtil.kr_e('⏰ 网络权限失败总耗时: ${totalMs}ms', tag: 'SplashController');
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
// 非手机端直接继续初始化
|
||||
KRLogUtil.kr_i('💻 桌面平台,直接执行初始化', tag: 'SplashController');
|
||||
_logStepTiming('桌面平台跳过权限检查');
|
||||
KRLogUtil.kr_i('[SPLASH_TIMING] 💻 桌面平台,直接执行初始化', tag: 'SplashController');
|
||||
await _kr_continueInitialization();
|
||||
}
|
||||
} catch (e) {
|
||||
// 计算初始化异常时的总耗时
|
||||
final endTime = DateTime.now();
|
||||
final totalDuration = endTime.difference(_startTime);
|
||||
final totalMs = totalDuration.inMilliseconds;
|
||||
|
||||
print('❌ 初始化异常时间: ${endTime.toIso8601String()}');
|
||||
print('🕐 初始化异常总耗时: ${totalMs}ms (${totalDuration.inSeconds}.${(totalMs % 1000).toString().padLeft(3, '0')}s)');
|
||||
|
||||
KRLogUtil.kr_e('❌ _kr_initialize 异常: $e', tag: 'SplashController');
|
||||
KRLogUtil.kr_e('⏰ 初始化异常总耗时: ${totalMs}ms', tag: 'SplashController');
|
||||
kr_hasError.value = true;
|
||||
kr_errorMessage.value = '${AppTranslations.kr_splash.kr_initializationFailed}$e';
|
||||
}
|
||||
@@ -188,37 +182,77 @@ class KRSplashController extends GetxController {
|
||||
|
||||
Future<void> _kr_continueInitialization() async {
|
||||
try {
|
||||
KRLogUtil.kr_i('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━', tag: 'SplashController');
|
||||
KRLogUtil.kr_i('🚀 启动页主流程开始...', tag: 'SplashController');
|
||||
KRLogUtil.kr_i('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━', tag: 'SplashController');
|
||||
_logStepTiming('开始继续初始化流程');
|
||||
KRLogUtil.kr_i('[SPLASH_TIMING] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━', tag: 'SplashController');
|
||||
KRLogUtil.kr_i('[SPLASH_TIMING] 🚀 启动页主流程开始...', tag: 'SplashController');
|
||||
KRLogUtil.kr_i('[SPLASH_TIMING] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━', tag: 'SplashController');
|
||||
|
||||
// 只在手机端检查网络连接
|
||||
if (Platform.isIOS || Platform.isAndroid) {
|
||||
KRLogUtil.kr_i('📱 检查网络连接...', tag: 'SplashController');
|
||||
_logStepTiming('开始网络连接检查');
|
||||
KRLogUtil.kr_i('[SPLASH_TIMING] 📱 检查网络连接...', tag: 'SplashController');
|
||||
final bool isConnected = await KRNetworkCheck.kr_checkNetworkConnection();
|
||||
if (!isConnected) {
|
||||
// 计算网络连接失败时的总耗时
|
||||
final endTime = DateTime.now();
|
||||
final totalDuration = endTime.difference(_startTime);
|
||||
final totalMs = totalDuration.inMilliseconds;
|
||||
|
||||
print('❌ 网络连接失败时间: ${endTime.toIso8601String()}');
|
||||
print('🕐 网络连接失败总耗时: ${totalMs}ms (${totalDuration.inSeconds}.${(totalMs % 1000).toString().padLeft(3, '0')}s)');
|
||||
|
||||
kr_hasError.value = true;
|
||||
kr_errorMessage.value = AppTranslations.kr_splash.kr_networkConnectionFailed;
|
||||
KRLogUtil.kr_e('❌ 网络连接失败', tag: 'SplashController');
|
||||
KRLogUtil.kr_e('⏰ 网络连接失败总耗时: ${totalMs}ms', tag: 'SplashController');
|
||||
return;
|
||||
}
|
||||
KRLogUtil.kr_i('✅ 网络连接正常', tag: 'SplashController');
|
||||
_logStepTiming('网络连接检查完成');
|
||||
KRLogUtil.kr_i('[SPLASH_TIMING] ✅ 网络连接正常', tag: 'SplashController');
|
||||
} else {
|
||||
KRLogUtil.kr_i('💻 桌面平台,跳过网络连接检查', tag: 'SplashController');
|
||||
_logStepTiming('桌面平台跳过网络检查');
|
||||
KRLogUtil.kr_i('[SPLASH_TIMING] 💻 桌面平台,跳过网络连接检查', tag: 'SplashController');
|
||||
}
|
||||
|
||||
// 网络检查完成后执行设备登录(始终支持)
|
||||
_logStepTiming('开始设备登录检查');
|
||||
// 5️⃣ 执行设备登录
|
||||
final success = await KRAppRunData.getInstance().kr_checkAndPerformDeviceLogin();
|
||||
|
||||
if (!success) {
|
||||
// 设备登录失败 → 提示用户重试
|
||||
HIDialog.show(
|
||||
message: '设备登录失败,请检查网络或重试',
|
||||
confirmText: '重试',
|
||||
preventBackDismiss: true,
|
||||
onConfirm: () async {
|
||||
await _kr_initialize(); // 递归重试
|
||||
},
|
||||
);
|
||||
return;
|
||||
}
|
||||
_logStepTiming('设备登录检查完成');
|
||||
|
||||
// 初始化配置
|
||||
KRLogUtil.kr_i('⚙️ 开始初始化应用配置...', tag: 'SplashController');
|
||||
await AppConfig().initConfig(
|
||||
onSuccess: () async {
|
||||
// 配置初始化成功,继续后续步骤
|
||||
KRLogUtil.kr_i('✅ 应用配置初始化成功,继续后续步骤', tag: 'SplashController');
|
||||
// 配置初始化成功,没有配置
|
||||
KRLogUtil.kr_i('[SPLASH_TIMING] ⚙️ 初始化应用配置...', tag: 'SplashController');
|
||||
await _kr_continueAfterConfig();
|
||||
},
|
||||
);
|
||||
} catch (e) {
|
||||
// 计算配置初始化异常时的总耗时
|
||||
final endTime = DateTime.now();
|
||||
final totalDuration = endTime.difference(_startTime);
|
||||
final totalMs = totalDuration.inMilliseconds;
|
||||
|
||||
print('❌ 配置初始化异常时间: ${endTime.toIso8601String()}');
|
||||
print('🕐 配置初始化异常总耗时: ${totalMs}ms (${totalDuration.inSeconds}.${(totalMs % 1000).toString().padLeft(3, '0')}s)');
|
||||
|
||||
// 配置初始化失败,显示错误信息
|
||||
KRLogUtil.kr_e('❌ 启动页初始化异常: $e', tag: 'SplashController');
|
||||
KRLogUtil.kr_e('⏰ 配置初始化异常总耗时: ${totalMs}ms', tag: 'SplashController');
|
||||
kr_hasError.value = true;
|
||||
kr_errorMessage.value = '${AppTranslations.kr_splash.kr_initializationFailed}$e';
|
||||
}
|
||||
@@ -228,20 +262,14 @@ class KRSplashController extends GetxController {
|
||||
Future<void> _kr_continueAfterConfig() async {
|
||||
try {
|
||||
// 初始化SingBox
|
||||
_logStepTiming('开始SingBox初始化');
|
||||
await KRSingBoxImp.instance.init();
|
||||
_logStepTiming('SingBox初始化完成');
|
||||
|
||||
// 检查是否已经通过设备登录设置了用户信息
|
||||
// 如果已登录(设备登录已完成),则跳过 initializeUserInfo
|
||||
// 如果未登录(没有设备登录或设备登录失败),则尝试从本地加载
|
||||
if (!KRAppRunData.getInstance().kr_isLogin.value) {
|
||||
KRLogUtil.kr_i('未检测到设备登录,尝试从本地加载用户信息', tag: 'SplashController');
|
||||
await KRAppRunData.getInstance().kr_initializeUserInfo();
|
||||
} else {
|
||||
KRLogUtil.kr_i('设备登录已完成,跳过用户信息初始化', tag: 'SplashController');
|
||||
}
|
||||
|
||||
// 等待一小段时间确保所有初始化完成
|
||||
await Future.delayed(const Duration(milliseconds: 500));
|
||||
// 用户信息初始化完成后,立即初始化订阅服务
|
||||
print('[SPLASH_TIMING] 🔄 开始初始化订阅服务...');
|
||||
KRLogUtil.kr_i('[SPLASH_TIMING] 🔄 开始初始化订阅服务', tag: 'SplashController');
|
||||
await _kr_ensureSubscribeServiceInitialized();
|
||||
|
||||
// 验证登录状态是否已正确设置
|
||||
final loginStatus = KRAppRunData.getInstance().kr_isLogin.value;
|
||||
@@ -257,22 +285,91 @@ class KRSplashController extends GetxController {
|
||||
}
|
||||
print('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
||||
|
||||
KRLogUtil.kr_i('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━', tag: 'SplashController');
|
||||
KRLogUtil.kr_i('🎯 准备进入主页', tag: 'SplashController');
|
||||
KRLogUtil.kr_i('📊 最终登录状态: $loginStatus', tag: 'SplashController');
|
||||
KRLogUtil.kr_i('🎫 Token存在: $hasToken', tag: 'SplashController');
|
||||
KRLogUtil.kr_i('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━', tag: 'SplashController');
|
||||
// 计算总耗时
|
||||
final endTime = DateTime.now();
|
||||
final totalDuration = endTime.difference(_startTime);
|
||||
final totalMs = totalDuration.inMilliseconds;
|
||||
|
||||
print('[SPLASH_TIMING] ⏰ 启动结束时间: ${endTime.toIso8601String()}');
|
||||
print('[SPLASH_TIMING] 🕐 启动总耗时: ${totalMs}ms (${totalDuration.inSeconds}.${(totalMs % 1000).toString().padLeft(3, '0')}s)');
|
||||
|
||||
KRLogUtil.kr_i('[SPLASH_TIMING] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━', tag: 'SplashController');
|
||||
KRLogUtil.kr_i('[SPLASH_TIMING] 🎯 准备进入主页', tag: 'SplashController');
|
||||
KRLogUtil.kr_i('[SPLASH_TIMING] 📊 最终登录状态: $loginStatus', tag: 'SplashController');
|
||||
KRLogUtil.kr_i('[SPLASH_TIMING] 🎫 Token存在: $hasToken', tag: 'SplashController');
|
||||
KRLogUtil.kr_i('[SPLASH_TIMING] ⏰ 启动总耗时: ${totalMs}ms', tag: 'SplashController');
|
||||
KRLogUtil.kr_i('[SPLASH_TIMING] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━', tag: 'SplashController');
|
||||
|
||||
// 直接导航到主页(无论是否登录,主页会根据登录状态显示不同内容)
|
||||
Get.offAllNamed(Routes.KR_MAIN);
|
||||
_logStepTiming('开始页面导航');
|
||||
if(loginStatus) {
|
||||
// 直接导航到主页
|
||||
Get.offAllNamed(Routes.KR_HOME);
|
||||
}else {
|
||||
kr_hasError.value = true;
|
||||
kr_errorMessage.value = '登录:${AppTranslations.kr_splash.kr_initializationFailed}';
|
||||
}
|
||||
_logStepTiming('页面导航完成');
|
||||
} catch (e) {
|
||||
// 计算错误时的总耗时
|
||||
final endTime = DateTime.now();
|
||||
final totalDuration = endTime.difference(_startTime);
|
||||
final totalMs = totalDuration.inMilliseconds;
|
||||
|
||||
print('❌ 启动失败时间: ${endTime.toIso8601String()}');
|
||||
print('🕐 启动失败总耗时: ${totalMs}ms (${totalDuration.inSeconds}.${(totalMs % 1000).toString().padLeft(3, '0')}s)');
|
||||
|
||||
// 后续步骤失败,显示错误信息
|
||||
KRLogUtil.kr_e('启动初始化失败: $e', tag: 'SplashController');
|
||||
KRLogUtil.kr_e('⏰ 启动失败总耗时: ${totalMs}ms', tag: 'SplashController');
|
||||
kr_hasError.value = true;
|
||||
kr_errorMessage.value = '${AppTranslations.kr_splash.kr_initializationFailed}$e';
|
||||
}
|
||||
}
|
||||
|
||||
/// 确保订阅服务初始化
|
||||
Future<void> _kr_ensureSubscribeServiceInitialized() async {
|
||||
try {
|
||||
// 检查订阅服务状态
|
||||
final currentStatus = kr_subscribeService.kr_currentStatus.value;
|
||||
KRLogUtil.kr_i('订阅服务当前状态: $currentStatus', tag: 'SplashController');
|
||||
|
||||
if (currentStatus == KRSubscribeServiceStatus.kr_none ||
|
||||
currentStatus == KRSubscribeServiceStatus.kr_error) {
|
||||
KRLogUtil.kr_i(
|
||||
'订阅服务未初始化或错误,开始初始化', tag: 'SplashController');
|
||||
|
||||
// 初始化订阅服务并等待完成
|
||||
// 设置加载状态
|
||||
KRHomeController().kr_currentListStatus.value = KRHomeViewsListStatus.kr_loading;
|
||||
try {
|
||||
await kr_subscribeService.kr_refreshAll();
|
||||
KRLogUtil.kr_i('订阅服务初始化完成', tag: 'SplashController');
|
||||
} catch (error) {
|
||||
KRLogUtil.kr_e('订阅服务初始化失败: $error', tag: 'SplashController');
|
||||
// 重新抛出异常,让调用方知道初始化失败
|
||||
KRHomeController().kr_currentListStatus.value = KRHomeViewsListStatus.kr_error;
|
||||
rethrow;
|
||||
}
|
||||
} else if (currentStatus == KRSubscribeServiceStatus.kr_loading) {
|
||||
KRLogUtil.kr_i('订阅服务正在初始化中', tag: 'SplashController');
|
||||
// 如果正在加载中,等待加载完成
|
||||
while (kr_subscribeService.kr_currentStatus.value == KRSubscribeServiceStatus.kr_loading) {
|
||||
await Future.delayed(Duration(milliseconds: 100));
|
||||
}
|
||||
KRLogUtil.kr_i('订阅服务加载完成,最终状态: ${kr_subscribeService.kr_currentStatus.value}', tag: 'SplashController');
|
||||
KRHomeController().kr_currentListStatus.value = KRHomeViewsListStatus.kr_loading;
|
||||
} else if (currentStatus == KRSubscribeServiceStatus.kr_success) {
|
||||
KRHomeController().kr_currentListStatus.value = KRHomeViewsListStatus.kr_none;
|
||||
KRLogUtil.kr_i('订阅服务已成功初始化', tag: 'SplashController');
|
||||
}
|
||||
} catch (e) {
|
||||
KRLogUtil.kr_e('确保订阅服务初始化失败: $e', tag: 'SplashController');
|
||||
KRHomeController().kr_currentListStatus.value = KRHomeViewsListStatus.kr_error;
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
// 重试按钮点击事件
|
||||
void kr_retry() {
|
||||
kr_hasError.value = false;
|
||||
@@ -289,4 +386,4 @@ class KRSplashController extends GetxController {
|
||||
void onClose() {
|
||||
super.onClose();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -36,32 +36,11 @@ class KRSplashView extends GetView<KRSplashController> {
|
||||
children: [
|
||||
// 图片区域
|
||||
KrLocalImage(
|
||||
imageName: "splash_illustration",
|
||||
width: 218.w,
|
||||
height: 194.w,
|
||||
imageName: "splash_illustration-hi",
|
||||
width: 286.w,
|
||||
height: 101.w,
|
||||
fit: BoxFit.contain,
|
||||
),
|
||||
SizedBox(height: 48.h),
|
||||
// 标题
|
||||
Text(
|
||||
AppTranslations.kr_splash.appName,
|
||||
style: KrAppTextStyle(
|
||||
fontSize: 32,
|
||||
fontWeight: FontWeight.bold,
|
||||
color: theme.textTheme.bodyMedium?.color,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 16.h),
|
||||
// 副标题
|
||||
Text(
|
||||
AppTranslations.kr_splash.slogan,
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 16.sp,
|
||||
color: theme.textTheme.bodySmall?.color,
|
||||
height: 1.5,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 24.h),
|
||||
// 加载指示器或错误信息
|
||||
Obx(() {
|
||||
@@ -79,8 +58,8 @@ class KRSplashView extends GetView<KRSplashController> {
|
||||
ElevatedButton(
|
||||
onPressed: controller.kr_retry,
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: Colors.blue,
|
||||
foregroundColor: Colors.white,
|
||||
backgroundColor: Theme.of(context).primaryColor,
|
||||
foregroundColor: Colors.black,
|
||||
padding: EdgeInsets.symmetric(
|
||||
horizontal: 32.w,
|
||||
vertical: 12.h,
|
||||
@@ -99,7 +78,7 @@ class KRSplashView extends GetView<KRSplashController> {
|
||||
return Column(
|
||||
children: [
|
||||
KRSimpleLoading(
|
||||
color: Colors.blue,
|
||||
color: Theme.of(context).primaryColor,
|
||||
size: 24.0,
|
||||
),
|
||||
SizedBox(height: 16.h),
|
||||
@@ -107,7 +86,7 @@ class KRSplashView extends GetView<KRSplashController> {
|
||||
AppTranslations.kr_splash.initializing,
|
||||
style: KrAppTextStyle(
|
||||
fontSize: 14,
|
||||
color: theme.textTheme.bodySmall?.color,
|
||||
color: Theme.of(context).primaryColor,
|
||||
),
|
||||
),
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user