Files
2026-09-21 17:37:53 +08:00

36 lines
1.3 KiB
Dart

import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../api/statistics_api.dart';
import '../models/statistics_response.dart';
import '../utils/date_util.dart';
/// 统计页的时间粒度
enum StatisticsTab { daily, weekly, monthly }
class StatisticsTabNotifier extends Notifier<StatisticsTab> {
@override
StatisticsTab build() => StatisticsTab.monthly; // 对齐 uniApp 默认按月
void set(StatisticsTab tab) => state = tab;
}
final statisticsTabProvider =
NotifierProvider<StatisticsTabNotifier, StatisticsTab>(StatisticsTabNotifier.new);
/// 按时间粒度取统计。日期范围在 provider 内按"当前时刻"计算,
/// 与 uniApp 行为一致:日=今天,周=本周一~今天,月=本自然月。
final statisticsProvider =
FutureProvider.autoDispose.family<StatisticsResponse, StatisticsTab>((ref, tab) {
final api = ref.watch(statisticsApiProvider);
final now = DateTime.now();
switch (tab) {
case StatisticsTab.daily:
final today = formatDate(now);
return api.getDaily(startDate: today, endDate: today);
case StatisticsTab.weekly:
return api.getWeekly(weekStart: formatDate(weekStart(now)));
case StatisticsTab.monthly:
return api.getMonthly(year: now.year, month: now.month);
}
});