Files
wushu/lib/services/get/favorites_controller.dart
2026-04-02 22:30:49 +08:00

114 lines
3.8 KiB
Dart

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../../constants/app_constants.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<void> refreshContent() async {
await Future.delayed(const Duration(milliseconds: 500));
Get.snackbar('提示', '内容已刷新');
}
void showFilterOptions(BuildContext context) {
// 先获取当前值,避免在弹窗中使用 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), () {
Get.snackbar('提示', '已按时间排序');
});
},
),
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), () {
Get.snackbar('提示', '已按分类排序');
});
},
),
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), () {
Get.snackbar('提示', likesFirst.value ? '点赞在前' : '笔记在前');
});
},
),
],
),
),
);
}
void navigateToSearch() {
Get.toNamed(
'/search',
arguments: searchQuery.value.isEmpty ? null : searchQuery.value,
);
}
void navigateToCollectNotes() {
Get.toNamed('/collect-notes');
}
}