hi-client/lib/app/modules/kr_main/controllers/kr_main_controller.dart
2025-11-02 01:05:43 -08:00

117 lines
3.5 KiB
Dart
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:flutter/widgets.dart';
import 'package:flutter/foundation.dart' show kDebugMode;
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_invite/views/kr_invite_view.dart';
import 'package:kaer_with_panels/app/modules/kr_statistics/views/kr_statistics_view.dart';
import 'package:kaer_with_panels/app/modules/kr_user_info/views/kr_user_info_view.dart';
import 'package:kaer_with_panels/app/modules/kr_user_info/controllers/kr_user_info_controller.dart';
import 'package:kaer_with_panels/app/widgets/kr_keep_alive_wrapper.dart';
import 'package:kaer_with_panels/app/common/app_run_data.dart';
import 'package:kaer_with_panels/app/localization/app_translations.dart';
import 'package:kaer_with_panels/app/widgets/dialogs/kr_dialog.dart';
import 'package:kaer_with_panels/app/routes/app_pages.dart';
import '../../../widgets/kr_language_switch_dialog.dart';
enum MainRoutes {
INDEX(0, '首页'),
DYNAMICS(1, '看看'),
TOTALLETTER(2, '邮筒'),
MESSAGELIST(3, '消息'),
USER_CENTER(4, '我的');
final int i;
final String title;
const MainRoutes(this.i, this.title);
}
class KRMainController extends GetxController {
static KRMainController get to => Get.find();
DateTime? lastPopTime;
var kr_currentIndex = 0.obs;
late final List<Widget> widgets;
/// 分页控制器
PageController pageController = PageController(keepPage: true);
@override
void 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} 个页面');
}
}
@override
void onReady() {
super.onReady();
}
@override
void onClose() {
super.onClose();
}
/// 到哪个页面具体传值查看MainRoutes的枚举类
kr_setPage(int index) {
// 🔒 检查邀请页面(index=1)是否需要登录
if (index == 1) {
final appRunData = KRAppRunData.getInstance();
final isDeviceLogin = appRunData.isDeviceLogin();
final isLoggedIn = appRunData.kr_isLogin.value && !isDeviceLogin;
// 如果是游客模式,弹出登录提示对话框,不切换页面
if (!isLoggedIn) {
KRDialog.show(
title: AppTranslations.kr_dialog.deviceLoginBindingTitle,
message: AppTranslations.kr_dialog.deviceLoginBindingMessage,
confirmText: AppTranslations.kr_dialog.kr_ok,
cancelText: AppTranslations.kr_dialog.kr_cancel,
onConfirm: () {
Get.back(); // 关闭对话框
// 延迟后跳转到登录页面
Future.delayed(const Duration(milliseconds: 300), () {
Get.toNamed(Routes.MR_LOGIN);
});
},
onCancel: () {
Get.back(); // 关闭对话框
},
);
return; // 不切换页面
}
}
// 正常切换页面
kr_currentIndex.value = index;
pageController.jumpToPage(index);
// 监控页面进入
if (index == MainRoutes.USER_CENTER.i) {
final userInfoController = Get.find<KRUserInfoController>();
userInfoController.kr_onPageEnter();
}
}
}