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 { @override StatisticsTab build() => StatisticsTab.monthly; // 对齐 uniApp 默认按月 void set(StatisticsTab tab) => state = tab; } final statisticsTabProvider = NotifierProvider(StatisticsTabNotifier.new); /// 按时间粒度取统计。日期范围在 provider 内按"当前时刻"计算, /// 与 uniApp 行为一致:日=今天,周=本周一~今天,月=本自然月。 final statisticsProvider = FutureProvider.autoDispose.family((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); } });