import 'package:get/get.dart'; import 'package:kaer_with_panels/app/common/app_config.dart'; import 'package:kaer_with_panels/app/common/app_run_data.dart'; import 'package:kaer_with_panels/app/services/api_service/kr_api.user.dart'; import 'package:kaer_with_panels/app/utils/kr_common_util.dart'; import 'package:kaer_with_panels/app/utils/kr_log_util.dart'; import 'package:kaer_with_panels/app/localization/app_translations.dart'; import 'package:kaer_with_panels/app/routes/app_pages.dart'; import 'package:flutter/services.dart'; import 'package:flutter/material.dart'; import 'package:qr_flutter/qr_flutter.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:kaer_with_panels/app/widgets/kr_app_text_style.dart'; import 'package:kaer_with_panels/app/modules/kr_main/controllers/kr_main_controller.dart'; import 'package:easy_refresh/easy_refresh.dart'; import 'package:kaer_with_panels/app/common/app_run_data.dart'; /// 邀请进度状态 class KRInviteProgress { final int pending; final int processing; final int success; final int expired; final int registers; final int totalCommission; KRInviteProgress({ this.pending = 0, this.processing = 0, this.success = 0, this.expired = 0, this.registers = 0, this.totalCommission = 0, }); } class KRInviteController extends GetxController { final kr_progress = KRInviteProgress( pending: 0, processing: 0, success: 0, expired: 0, registers: 0, totalCommission: 0, ).obs; final kr_referCode = ''.obs; final kr_isLoading = false.obs; final count = 0.obs; final EasyRefreshController refreshController = EasyRefreshController(); final otherInviteCodeController = TextEditingController(); @override void onInit() { super.onInit(); ever(KRAppRunData.getInstance().kr_isLogin, (value) { if (value) { _kr_fetchUserInfo(); _kr_fetchAffiliateCount(); } else { kr_progress.value = KRInviteProgress( pending: 0, processing: 0, success: 0, expired: 0, registers: 0, totalCommission: 0, ); kr_referCode.value = ''; } }); if (KRAppRunData.getInstance().kr_isLogin.value) { _kr_fetchUserInfo(); _kr_fetchAffiliateCount(); } } // ⚠️ 已废弃:新版本后端不再提供 kr_getUserInfo 接口 // 从 AppRunData 获取邀请码(登录后自动获取) Future _kr_fetchUserInfo() async { try { kr_isLoading.value = true; KRLogUtil.kr_i('🔍 [InviteController] 开始获取邀请码...', tag: 'InviteController'); // 从 AppRunData 获取用户邀请码(已在登录时获取) final appData = KRAppRunData.getInstance(); KRLogUtil.kr_i('📊 [InviteController] AppRunData 状态:', tag: 'InviteController'); KRLogUtil.kr_i(' - kr_isLogin: ${appData.kr_isLogin.value}', tag: 'InviteController'); KRLogUtil.kr_i(' - kr_account: ${appData.kr_account.value}', tag: 'InviteController'); KRLogUtil.kr_i(' - kr_referCode: ${appData.kr_referCode.value}', tag: 'InviteController'); KRLogUtil.kr_i(' - kr_balance: ${appData.kr_balance.value}', tag: 'InviteController'); KRLogUtil.kr_i(' - kr_commission: ${appData.kr_commission.value}', tag: 'InviteController'); kr_referCode.value = appData.kr_referCode.value; KRLogUtil.kr_i('📋 [InviteController] 获取到邀请码: "${kr_referCode.value}"', tag: 'InviteController'); if (kr_referCode.value.isEmpty) { KRLogUtil.kr_w('⚠️ [InviteController] 邀请码为空!', tag: 'InviteController'); } } catch (e) { KRLogUtil.kr_e('❌ [InviteController] 获取邀请码失败: $e', tag: 'InviteController'); KRCommonUtil.kr_showToast(e.toString()); } finally { kr_isLoading.value = false; } } Future kr_checkLoginStatus() async { return KRAppRunData.getInstance().kr_isLogin.value; } /// 获取分享链接 String kr_getShareLink() { if (kr_referCode.isEmpty) { return ''; } return '${AppConfig.getInstance().kr_invitation_link}${kr_referCode.value}'; } /// 获取二维码内容 String kr_getQRCodeContent() { return kr_getShareLink(); } /// 复制文本到剪贴板 Future _kr_copyToClipboard(String text) async { await Clipboard.setData(ClipboardData(text: text)); KRCommonUtil.kr_showToast(AppTranslations.kr_invite.copiedToClipboard); } Future kr_handleQRShare() async { if (!await kr_checkLoginStatus()) { Get.find().kr_setPage(0); return; } if (kr_referCode.isEmpty) { await _kr_fetchUserInfo(); if (kr_referCode.isEmpty) { KRCommonUtil.kr_showToast(AppTranslations.kr_invite.getInviteCodeFailed); return; } } final qrContent = kr_getQRCodeContent(); if (qrContent.isEmpty) { KRCommonUtil.kr_showToast(AppTranslations.kr_invite.generateQRCodeFailed); return; } // 只有在登录状态下才弹出二维码对话框 if (KRAppRunData.getInstance().kr_isLogin.value) { Get.dialog( Dialog( backgroundColor: Theme.of(Get.context!).cardColor, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(16.r), ), child: Container( padding: EdgeInsets.symmetric(horizontal: 20.w, vertical: 24.w), child: Column( mainAxisSize: MainAxisSize.min, children: [ Text( AppTranslations.kr_invite.shareQR, style: KrAppTextStyle( fontSize: 17, fontWeight: FontWeight.w600, color: Theme.of(Get.context!).textTheme.titleMedium?.color, ), ), SizedBox(height: 16.w), Container( padding: EdgeInsets.all(16.w), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(12.r), border: Border.all( color: Theme.of(Get.context!).dividerColor.withOpacity(0.1), ), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.05), blurRadius: 10, offset: Offset(0, 2), ), ], ), child: QrImageView( data: qrContent, version: QrVersions.auto, size: 200.w, backgroundColor: Colors.white, foregroundColor: Colors.black, ), ), SizedBox(height: 20.w), Container( width: double.infinity, height: 44.w, child: TextButton( onPressed: () => Get.back(), style: TextButton.styleFrom( backgroundColor: Theme.of(Get.context!).primaryColor.withOpacity(0.1), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(22.r), ), ), child: Text( AppTranslations.kr_invite.close, style: TextStyle( color: Theme.of(Get.context!).textTheme.bodyMedium?.color, fontSize: 16.sp, fontWeight: FontWeight.w500, fontFamily: 'AlibabaPuHuiTi-Regular', ), ), ), ), ], ), ), ), ); } } void kr_viewRewardDetails() { // TODO: 实现查看奖励明细功能 } @override void onReady() { super.onReady(); } @override void onClose() { refreshController.dispose(); super.onClose(); } void increment() => count.value++; /// 处理链接分享 Future kr_handleLinkShare() async { if (!await kr_checkLoginStatus()) { Get.find().kr_setPage(0); return; } if (kr_referCode.isEmpty) { await _kr_fetchUserInfo(); if (kr_referCode.isEmpty) { KRCommonUtil.kr_showToast(AppTranslations.kr_invite.getInviteCodeFailed); return; } } final shareLink = kr_getShareLink(); if (shareLink.isEmpty) { KRCommonUtil.kr_showToast(AppTranslations.kr_invite.generateShareLinkFailed); return; } await _kr_copyToClipboard(shareLink); } /// 处理复制邀请码 Future kr_handleCopyInviteCode() async { if (!await kr_checkLoginStatus()) { Get.find().kr_setPage(0); return; } if (kr_referCode.isEmpty) { await _kr_fetchUserInfo(); if (kr_referCode.isEmpty) { KRCommonUtil.kr_showToast(AppTranslations.kr_invite.getInviteCodeFailed); return; } } await _kr_copyToClipboard(kr_referCode.value); } /// 处理绑定邀请码 Future kr_handleBindInviteCode() async { final text = otherInviteCodeController.text; print('输入的邀请码是: $text'); if (text.isEmpty) { KRCommonUtil.kr_showToast('请输入邀请码'); return; } try { final either = await KRUserApi().hi_inviteCode(text); either.fold( (error) => KRCommonUtil.kr_showToast(error.msg), (affiliateCount) { KRCommonUtil.kr_showToast('绑定成功: $text'); otherInviteCodeController.text = ''; }, ); } catch (e) { KRCommonUtil.kr_showToast(e.toString()); } } /// 获取邀请统计信息 Future _kr_fetchAffiliateCount() async { try { final either = await KRUserApi().kr_getAffiliateCount(); either.fold( (error) => KRCommonUtil.kr_showToast(error.msg), (affiliateCount) { kr_progress.value = KRInviteProgress( pending: kr_progress.value.pending, processing: kr_progress.value.processing, success: kr_progress.value.success, expired: kr_progress.value.expired, registers: affiliateCount.registers, totalCommission: affiliateCount.totalCommission, ); }, ); } catch (e) { KRCommonUtil.kr_showToast(e.toString()); } } Future kr_onRefresh() async { if (!KRAppRunData.getInstance().kr_isLogin.value) { refreshController.finishRefresh(); return; } try { await _kr_fetchUserInfo(); await _kr_fetchAffiliateCount(); } finally { refreshController.finishRefresh(); } } }