优化部分安卓机型可能存在连接超时等问题新增日志排查

(cherry picked from commit e0fcc27f28f27321a49115df86507e3ac55e8ef8)
This commit is contained in:
2025-11-02 01:32:51 -08:00
committed by speakeloudest
parent b8d0417d0f
commit dee7f0a591
11 changed files with 416 additions and 43 deletions
@@ -5,6 +5,8 @@ import 'package:kaer_with_panels/app/utils/kr_common_util.dart';
import 'package:kaer_with_panels/app/localization/app_translations.dart';
import 'package:kaer_with_panels/app/utils/kr_log_util.dart';
import 'package:url_launcher/url_launcher.dart';
import 'dart:io';
import 'package:path_provider/path_provider.dart';
import '../../../common/app_run_data.dart';
import '../../../common/app_config.dart';
@@ -13,6 +15,7 @@ import '../../../model/response/kr_payment_methods.dart';
import '../../../routes/app_pages.dart';
import '../../../services/api_service/kr_api.user.dart';
import '../../../utils/kr_event_bus.dart';
import '../../../network/http_util.dart';
import 'package:flutter/foundation.dart';
/// 会员购买控制器
@@ -47,8 +50,28 @@ class KRPurchaseMembershipController extends GetxController {
RxInt _kr_balance = 0.obs;
@override
void onInit() {
void onInit() async {
super.onInit();
print('💳 [PurchaseMembership] ========== Controller.onInit 被调用 ==========');
print('💳 [PurchaseMembership] 当前时间: ${DateTime.now()}');
// 🔧 紧急诊断:写文件确认购买页面Controller被初始化
try {
final dir = await getApplicationDocumentsDirectory();
final debugFile = File('${dir.path}/PURCHASE_CONTROLLER_DEBUG.txt');
await debugFile.writeAsString(
'=' * 60 + '\n'
'💳 PurchaseMembershipController.onInit 被调用!\n'
'时间: ${DateTime.now()}\n'
'版本标识: Android15_Fix_v5\n'
'=' * 60 + '\n',
mode: FileMode.append,
);
print('💳 [PurchaseMembership] ✅ 调试日志已写入文件: ${debugFile.path}');
} catch (e) {
print('💳 [PurchaseMembership] ❌ 写入调试日志失败: $e');
}
kr_initializeData();
}
@@ -60,14 +83,24 @@ class KRPurchaseMembershipController extends GetxController {
/// 初始化数据
Future<void> kr_initializeData() async {
print('💳 [PurchaseMembership] initializeData 开始');
kr_userEmail.value = KRAppRunData.getInstance().kr_account.toString();
await kr_getPackageList();
print('💳 [PurchaseMembership] 用户邮箱: ${kr_userEmail.value}');
// 🔧 关键修复:不要在 onInit 中 await,让页面先显示,数据异步加载
// 这样可以避免 API 请求卡住导致页面无法显示
print('💳 [PurchaseMembership] 开始异步加载套餐数据...');
kr_getPackageList().catchError((e) {
print('💳 [PurchaseMembership] ❌ 加载套餐数据异常: $e');
KRLogUtil.kr_e('加载套餐数据失败: $e', tag: 'PurchaseMembership');
});
// 监听所有支付相关消息
_kr_eventWorker = KREventBus().kr_listenMessages(
[KRMessageType.kr_payment, KRMessageType.kr_subscribe_update],
_kr_handleMessage,
);
print('💳 [PurchaseMembership] initializeData 完成');
}
/// 处理消息
@@ -94,23 +127,102 @@ class KRPurchaseMembershipController extends GetxController {
/// 获取套餐列表和支付方式
Future<void> kr_getPackageList() async {
print('💳 [PurchaseMembership] ========== 开始获取套餐列表 ==========');
print('💳 [PurchaseMembership] 当前时间: ${DateTime.now()}');
kr_isLoading.value = true;
kr_selectedPlanIndex.value = 0; // 重置套餐选择
kr_selectedDiscountIndex.value = -1; // 重置折扣选择
kr_selectedPaymentMethodIndex.value = -1; // 重置支付方式选择
await _iniUserInfo();
await kr_getAlreadySubscribe();
await kr_fetchPackages();
// await kr_fetchPaymentMethods(); // ⚠️ 后端暂未实现 /v1/app/payment/methods 接口
try {
// 🔧 添加超时保护,避免 API 请求卡死
print('💳 [PurchaseMembership] 步骤1: 开始初始化用户信息...');
await _iniUserInfo().timeout(
const Duration(seconds: 5),
onTimeout: () {
print('💳 [PurchaseMembership] ⚠️ 初始化用户信息超时');
KRLogUtil.kr_w('初始化用户信息超时', tag: 'PurchaseMembership');
},
);
print('💳 [PurchaseMembership] ✓ 步骤1完成');
// 获取公开的支付方式
await _kr_fetchPublicPaymentMethods();
print('💳 [PurchaseMembership] 步骤2: 开始获取已订阅套餐...');
await kr_getAlreadySubscribe().timeout(
const Duration(seconds: 5),
onTimeout: () {
print('💳 [PurchaseMembership] ⚠️ 获取已订阅套餐超时');
KRLogUtil.kr_w('获取已订阅套餐超时', tag: 'PurchaseMembership');
},
);
print('💳 [PurchaseMembership] ✓ 步骤2完成');
// 根据套餐数量决定是否显示套餐选择器
kr_showPlanSelector.value = kr_plans.length > 1;
print('💳 [PurchaseMembership] 步骤3: 开始获取套餐列表...');
await kr_fetchPackages().timeout(
const Duration(seconds: 8),
onTimeout: () {
print('💳 [PurchaseMembership] ❌ 获取套餐列表超时');
KRLogUtil.kr_e('获取套餐列表超时', tag: 'PurchaseMembership');
KRCommonUtil.kr_showToast('获取套餐列表超时,请检查网络');
},
);
print('💳 [PurchaseMembership] ✓ 步骤3完成,套餐数量: ${kr_plans.length}');
kr_isLoading.value = false;
// 获取公开的支付方式
print('💳 [PurchaseMembership] 步骤4: 开始获取支付方式...');
await _kr_fetchPublicPaymentMethods().timeout(
const Duration(seconds: 5),
onTimeout: () {
print('💳 [PurchaseMembership] ⚠️ 获取支付方式超时');
KRLogUtil.kr_w('获取支付方式超时', tag: 'PurchaseMembership');
},
);
print('💳 [PurchaseMembership] ✓ 步骤4完成,支付方式数量: ${kr_paymentMethods.length}');
// 根据套餐数量决定是否显示套餐选择器
kr_showPlanSelector.value = kr_plans.length > 1;
print('💳 [PurchaseMembership] ========== 所有步骤完成 ==========');
} catch (e, stackTrace) {
print('💳 [PurchaseMembership] ❌❌❌ 获取套餐数据失败: $e');
print('💳 [PurchaseMembership] StackTrace: $stackTrace');
KRLogUtil.kr_e('获取套餐数据失败: $e', tag: 'PurchaseMembership');
// 🔧 关键修复:API失败时,尝试切换域名并重试
print('💳 [PurchaseMembership] 🔄 尝试切换域名并重试...');
bool domainSwitched = await KRDomain.kr_switchToNextDomain();
if (domainSwitched) {
print('💳 [PurchaseMembership] ✓ 域名切换成功,当前域名: ${KRDomain.kr_currentDomain}');
print('💳 [PurchaseMembership] 🔄 使用新域名重试...');
// 更新 HttpUtil 的 baseUrl
HttpUtil.getInstance().updateBaseUrl();
// 等待500ms让域名生效
await Future.delayed(const Duration(milliseconds: 500));
// 重试一次
try {
await kr_fetchPackages().timeout(
const Duration(seconds: 8),
onTimeout: () {
print('💳 [PurchaseMembership] ❌ 使用新域名后仍然超时');
KRLogUtil.kr_e('使用新域名后仍然超时', tag: 'PurchaseMembership');
},
);
print('💳 [PurchaseMembership] ✓ 使用新域名重试成功,套餐数量: ${kr_plans.length}');
} catch (retryError) {
print('💳 [PurchaseMembership] ❌ 使用新域名重试仍然失败: $retryError');
kr_errorMessage.value = '网络连接失败,请检查网络设置';
}
} else {
print('💳 [PurchaseMembership] ❌ 域名切换失败,所有域名都不可用');
kr_errorMessage.value = '无法连接服务器,请稍后重试';
}
} finally {
kr_isLoading.value = false;
print('💳 [PurchaseMembership] 加载状态设置为: false');
}
}
/// 初始化用户信息
@@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'dart:io' show Platform;
import 'package:flutter/foundation.dart' show kIsWeb;