Files
DMZJ_F/lib/modules/index/index_controller.dart
2026-03-07 17:24:59 +08:00

101 lines
3.0 KiB
Dart
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 'dart:async';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_dmzj/app/platform_utils.dart';
import 'package:flutter_dmzj/services/app_settings_service.dart';
import 'package:flutter_dmzj/app/dialog_utils.dart';
import 'package:flutter_dmzj/app/event_bus.dart';
import 'package:flutter_dmzj/app/utils.dart';
import 'package:flutter_dmzj/modules/comic/home/comic_home_page.dart';
import 'package:flutter_dmzj/modules/news/home/news_home_controller.dart';
import 'package:flutter_dmzj/modules/news/home/news_home_page.dart';
import 'package:flutter_dmzj/modules/novel/home/novel_home_controller.dart';
import 'package:flutter_dmzj/modules/novel/home/novel_home_page.dart';
import 'package:flutter_dmzj/modules/user/user_home_page.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart';
import 'package:multi_split_view/multi_split_view.dart';
class IndexController extends GetxController {
final index = 0.obs;
final showContent = false.obs;
final GlobalKey indexKey = GlobalKey();
final GlobalKey subRouterKey = GlobalKey();
final MultiSplitViewController multiSplitViewController =
MultiSplitViewController(areas: [
Area(minimalSize: 400, size: 500),
]);
/// 双击退出Flag
bool doubleClickExit = false;
/// 双击退出Timer
Timer? doubleClickTimer;
final pages = [
const ComicHomePage(),
const SizedBox(),
const SizedBox(),
const UserHomePage(),
];
@override
void onInit() {
if (PlatformUtils.isWindows) {
// Windows: 预先初始化所有分区控制器确保NavigationView所有PaneItem.body可用
if (!Get.isRegistered<NewsHomeController>()) {
Get.put(NewsHomeController());
}
if (!Get.isRegistered<NovelHomeController>()) {
Get.put(NovelHomeController());
}
pages[1] = const NewsHomePage();
pages[2] = const NovelHomePage();
}
Future.delayed(Duration.zero, showFirstRun);
super.onInit();
}
@override
void onClose() {}
void setIndex(i) {
if (i == 1 && pages[i] is SizedBox) {
Get.put(NewsHomeController());
pages[i] = const NewsHomePage();
} else if (i == 2 && pages[i] is SizedBox) {
Get.put(NovelHomeController());
pages[i] = const NovelHomePage();
}
if (index.value == i) {
EventBus.instance.emit<int>(EventBus.kBottomNavigationBarClicked, i);
}
index.value = i;
}
void showFirstRun() async {
if (AppSettingsService.instance.firstRun) {
AppSettingsService.instance.setNoFirstRun();
DialogUtils.showStatement();
Utils.checkUpdate();
} else {
Utils.checkUpdate();
}
}
void setDoubleExitFlag() {
if (doubleClickExit) {
doubleClickTimer?.cancel();
Get.back();
return;
}
doubleClickExit = true;
SmartDialog.showToast("再按一次退出应用");
doubleClickTimer = Timer(const Duration(seconds: 2), () {
doubleClickExit = false;
doubleClickTimer!.cancel();
});
}
}