124 lines
4.4 KiB
Dart
124 lines
4.4 KiB
Dart
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<void> refreshContent() async {
|
|
await Future.delayed(const Duration(milliseconds: 500));
|
|
final themeController = Get.find<ThemeController>();
|
|
Get.snackbar('提示', '内容已刷新', colorText: themeController.currentThemeColor);
|
|
}
|
|
|
|
void showFilterOptions(BuildContext context) {
|
|
final themeController = Get.find<ThemeController>();
|
|
// 先获取当前值,避免在弹窗中使用 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<ThemeController>();
|
|
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<ThemeController>();
|
|
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<ThemeController>();
|
|
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');
|
|
}
|
|
}
|