import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../../constants/app_constants.dart'; import 'theme_controller.dart'; class FavoritesController extends GetxController { var categories = ['全部', '点赞', '笔记', '推送', '每日一句'].obs; var isGridView = true.obs; var currentTabIndex = 0.obs; var searchQuery = ''.obs; var sortByTime = true.obs; // true: 按时间排序, false: 按分类排序 var likesFirst = true.obs; // true: 点赞在前, false: 笔记在前 void toggleViewMode() { isGridView.value = !isGridView.value; } void setCurrentTabIndex(int index) { currentTabIndex.value = index; } void setSearchQuery(String query) { searchQuery.value = query; } Future refreshContent() async { await Future.delayed(const Duration(milliseconds: 500)); final themeController = Get.find(); Get.snackbar('提示', '内容已刷新', colorText: themeController.currentThemeColor); } void showFilterOptions(BuildContext context) { final themeController = Get.find(); // 先获取当前值,避免在弹窗中使用 Obx final currentSortByTime = sortByTime.value; final currentLikesFirst = likesFirst.value; showModalBottomSheet( context: context, builder: (BuildContext context) => Container( padding: const EdgeInsets.all(16), child: Column( mainAxisSize: MainAxisSize.min, children: [ const Text( '排序选项', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), ), const SizedBox(height: 16), ListTile( leading: const Icon(Icons.date_range), title: const Text('按时间排序'), trailing: Icon( currentSortByTime ? Icons.radio_button_checked : Icons.radio_button_unchecked, color: AppConstants.primaryColor, ), onTap: () { Navigator.pop(context); sortByTime.value = true; // 使用 Future.delayed 确保弹窗完全关闭后再显示 snackbar Future.delayed(const Duration(milliseconds: 100), () { final tc = Get.find(); Get.snackbar('提示', '已按时间排序', colorText: tc.currentThemeColor); }); }, ), ListTile( leading: const Icon(Icons.title), title: const Text('按分类排序'), trailing: Icon( !currentSortByTime ? Icons.radio_button_checked : Icons.radio_button_unchecked, color: AppConstants.primaryColor, ), onTap: () { Navigator.pop(context); sortByTime.value = false; // 使用 Future.delayed 确保弹窗完全关闭后再显示 snackbar Future.delayed(const Duration(milliseconds: 100), () { final tc = Get.find(); Get.snackbar('提示', '已按分类排序', colorText: tc.currentThemeColor); }); }, ), const Divider(), ListTile( leading: const Icon(Icons.swap_vert), title: Text(currentLikesFirst ? '点赞在前' : '笔记在前'), trailing: Icon(Icons.swap_vert, color: AppConstants.primaryColor), onTap: () { Navigator.pop(context); likesFirst.value = !likesFirst.value; // 使用 Future.delayed 确保弹窗完全关闭后再显示 snackbar Future.delayed(const Duration(milliseconds: 100), () { final tc = Get.find(); Get.snackbar( '提示', likesFirst.value ? '点赞在前' : '笔记在前', colorText: tc.currentThemeColor, ); }); }, ), ], ), ), ); } void navigateToSearch() { Get.toNamed( '/search', arguments: searchQuery.value.isEmpty ? null : searchQuery.value, ); } void navigateToCollectNotes() { Get.toNamed('/collect-notes'); } }