import 'dart:async'; import 'package:flutter/services.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; import 'package:flutter/material.dart'; import 'package:hive/hive.dart'; import 'package:pilipala/http/common.dart'; import 'package:pilipala/pages/dynamics/index.dart'; import 'package:pilipala/pages/home/view.dart'; import 'package:pilipala/pages/media/index.dart'; import 'package:pilipala/pages/rank/index.dart'; import 'package:pilipala/utils/storage.dart'; import 'package:pilipala/utils/utils.dart'; import '../../models/common/dynamic_badge_mode.dart'; import '../../models/common/nav_bar_config.dart'; class MainController extends GetxController { List pages = [ const HomePage(), const RankPage(), const DynamicsPage(), const MediaPage(), ]; RxList navigationBars = defaultNavigationBars.obs; final StreamController bottomBarStream = StreamController.broadcast(); Box setting = GStrorage.setting; DateTime? _lastPressedAt; late bool hideTabBar; late PageController pageController; int selectedIndex = 0; Box userInfoCache = GStrorage.userInfo; RxBool userLogin = false.obs; late Rx dynamicBadgeType = DynamicBadgeMode.number.obs; @override void onInit() { super.onInit(); if (setting.get(SettingBoxKey.autoUpdate, defaultValue: false)) { Utils.checkUpdata(); } hideTabBar = setting.get(SettingBoxKey.hideTabBar, defaultValue: true); int defaultHomePage = setting.get(SettingBoxKey.defaultHomePage, defaultValue: 0) as int; selectedIndex = defaultNavigationBars .indexWhere((item) => item['id'] == defaultHomePage); var userInfo = userInfoCache.get('userInfoCache'); userLogin.value = userInfo != null; dynamicBadgeType.value = DynamicBadgeMode.values[setting.get( SettingBoxKey.dynamicBadgeMode, defaultValue: DynamicBadgeMode.number.code)]; if (dynamicBadgeType.value != DynamicBadgeMode.hidden) { getUnreadDynamic(); } } void onBackPressed(BuildContext context) { if (_lastPressedAt == null || DateTime.now().difference(_lastPressedAt!) > const Duration(seconds: 2)) { // 两次点击时间间隔超过2秒,重新记录时间戳 _lastPressedAt = DateTime.now(); if (selectedIndex != 0) { pageController.jumpTo(0); } SmartDialog.showToast("再按一次退出Pili"); return; // 不退出应用 } SystemNavigator.pop(); // 退出应用 } void getUnreadDynamic() async { if (!userLogin.value) { return; } int dynamicItemIndex = navigationBars.indexWhere((item) => item['label'] == "动态"); var res = await CommonHttp.unReadDynamic(); var data = res['data']; if (dynamicItemIndex != -1) { navigationBars[dynamicItemIndex]['count'] = data == null ? 0 : data.length; // 修改 count 属性为新的值 } navigationBars.refresh(); } void clearUnread() async { int dynamicItemIndex = navigationBars.indexWhere((item) => item['label'] == "动态"); if (dynamicItemIndex != -1) { navigationBars[dynamicItemIndex]['count'] = 0; // 修改 count 属性为新的值 } navigationBars.refresh(); } }