import 'package:get/get.dart'; import 'package:kaer_with_panels/app/common/app_run_data.dart'; import 'package:kaer_with_panels/app/widgets/dialogs/kr_dialog.dart'; import 'package:kaer_with_panels/app/routes/app_pages.dart'; import 'package:kaer_with_panels/app/utils/kr_log_util.dart'; import 'package:kaer_with_panels/app/localization/app_translations.dart'; import 'dart:io'; import 'package:path_provider/path_provider.dart'; /// 订阅导航工具类 /// 用于统一处理订阅相关的导航逻辑 class KRSubscribeNavigationUtil { /// 导航到购买会员页面 /// 如果是设备登录用户,会先提示需要绑定账号,然后跳转到登录页面 /// 如果是普通用户,直接跳转到购买会员页面 /// /// [tag] 调用来源标签,用于日志记录 static void navigateToPurchase({String tag = 'Subscribe'}) { print('🔔 [NavigationUtil] ========== navigateToPurchase 被调用 =========='); print('🔔 [NavigationUtil] Tag: $tag'); print('🔔 [NavigationUtil] 当前时间: ${DateTime.now()}'); // 🔧 先获取关键信息并打印 final appRunData = KRAppRunData.getInstance(); final isDeviceLogin = appRunData.isDeviceLogin(); final account = appRunData.kr_account.value; print('🔔 [NavigationUtil] 账号: $account'); print('🔔 [NavigationUtil] 是否设备登录: $isDeviceLogin'); KRLogUtil.kr_i('=== 订阅按钮点击 ===', tag: tag); KRLogUtil.kr_i('账号: $account', tag: tag); KRLogUtil.kr_i('是否设备登录: $isDeviceLogin', tag: tag); // 🔧 文件写入改为非阻塞,放在后面 Future(() async { try { final dir = await getApplicationDocumentsDirectory(); final debugFile = File('${dir.path}/NAVIGATION_DEBUG.txt'); await debugFile.writeAsString( '=' * 60 + '\n' '🔔 navigateToPurchase 被调用!\n' '时间: ${DateTime.now()}\n' '来源: $tag\n' '账号: $account\n' '是否设备登录: $isDeviceLogin\n' '版本标识: Android15_Fix_v7_DialogFixed\n' '=' * 60 + '\n', mode: FileMode.append, ); } catch (e) { print('🔔 [NavigationUtil] ❌ 写入导航日志失败: $e'); } }); // 🔧 v7 关键修复:恢复业务逻辑 - 设备登录用户必须先看到绑定提示对话框 // v6 版本试图跳过对话框直接购买,但用户明确要求必须提示登录 // 已修复 KRDialog 的 ScreenUtil 问题,对话框现在应该可以正常显示 if (isDeviceLogin) { // 设备登录用户 - 显示绑定账号提示对话框 print('🔔 [NavigationUtil] ⚠️ 检测到设备登录,显示绑定账号提示对话框'); KRLogUtil.kr_i('设备登录用户,显示绑定提示', tag: tag); Future(() async { try { final dir = await getApplicationDocumentsDirectory(); final debugFile = File('${dir.path}/NAVIGATION_DEBUG.txt'); await debugFile.writeAsString( '⚠️ 检测到设备登录,准备显示对话框\n' '账号: $account\n' '时间: ${DateTime.now()}\n' '版本标识: Android15_Fix_v7_DialogFixed\n' '-' * 60 + '\n', mode: FileMode.append, ); } catch (e) { /* 忽略 */ } }); try { print('🔔 [NavigationUtil] 📍 正在调用 KRDialog.show() 显示绑定提示...'); KRDialog.show( title: AppTranslations.kr_dialog.deviceLoginBindingTitle, message: AppTranslations.kr_dialog.deviceLoginBindingMessage, confirmText: AppTranslations.kr_dialog.kr_ok, onConfirm: () { print('🔔 [NavigationUtil] 用户点击确认,跳转到登录页面'); Get.toNamed(Routes.MR_LOGIN); }, ); print('🔔 [NavigationUtil] 📍 KRDialog.show() 调用完成'); } catch (e) { KRLogUtil.kr_e('显示绑定提示对话框失败: $e', tag: tag); print('🔔 [NavigationUtil] ❌ 显示对话框异常: $e'); } } else { // 普通登录用户 - 直接跳转到购买页面 print('🔔 [NavigationUtil] ✅ 普通用户,准备跳转到购买页面'); KRLogUtil.kr_i('普通用户,跳转到购买页面', tag: tag); Future(() async { try { final dir = await getApplicationDocumentsDirectory(); final debugFile = File('${dir.path}/NAVIGATION_DEBUG.txt'); await debugFile.writeAsString( '✅ 普通用户,准备调用 Get.toNamed\n' '路由: ${Routes.KR_PURCHASE_MEMBERSHIP}\n' '时间: ${DateTime.now()}\n' '版本标识: Android15_Fix_v7_DialogFixed\n' '-' * 60 + '\n', mode: FileMode.append, ); } catch (e) { /* 忽略 */ } }); try { print('🔔 [NavigationUtil] 📍 步骤1: 正在调用 Get.toNamed(${Routes.KR_PURCHASE_MEMBERSHIP})...'); final result = Get.toNamed(Routes.KR_PURCHASE_MEMBERSHIP); print('🔔 [NavigationUtil] 📍 步骤2: Get.toNamed 调用完成,返回值: $result'); Future(() async { try { final dir = await getApplicationDocumentsDirectory(); final debugFile = File('${dir.path}/NAVIGATION_DEBUG.txt'); await debugFile.writeAsString( '✅ Get.toNamed 执行完成\n' '路由: ${Routes.KR_PURCHASE_MEMBERSHIP}\n' '返回值: $result\n' '时间: ${DateTime.now()}\n' '-' * 60 + '\n', mode: FileMode.append, ); } catch (e) { print('🔔 [NavigationUtil] ❌ 写入跳转完成日志失败: $e'); } }); } catch (e) { KRLogUtil.kr_e('跳转购买页面失败: $e', tag: tag); print('🔔 [NavigationUtil] ❌❌❌ 跳转异常: $e'); Future(() async { try { final dir = await getApplicationDocumentsDirectory(); final debugFile = File('${dir.path}/NAVIGATION_DEBUG.txt'); await debugFile.writeAsString( '❌ Get.toNamed 执行失败\n' '异常: $e\n' '时间: ${DateTime.now()}\n' '-' * 60 + '\n', mode: FileMode.append, ); } catch (e) { print('🔔 [NavigationUtil] ❌ 写入跳转失败日志失败: $e'); } }); // 如果跳转失败,显示错误提示 KRDialog.show( title: AppTranslations.kr_dialog.error, message: AppTranslations.kr_home.checkNetwork, confirmText: AppTranslations.kr_dialog.kr_ok, onConfirm: () => Get.back(), ); } } } }