Files
AutoTime-Tracker/lib/providers/statistics_provider.dart
2025-11-13 15:45:28 +08:00

55 lines
1.8 KiB
Dart
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../models/daily_stats.dart';
import '../models/app_usage.dart';
import '../services/statistics_service.dart';
// StatisticsService Provider
final statisticsServiceProvider = Provider<StatisticsService>((ref) {
return StatisticsService();
});
// 今日统计 Provider
final todayStatsProvider = FutureProvider<DailyStats>((ref) async {
final service = ref.read(statisticsServiceProvider);
return await service.getTodayStats();
});
// 本周统计 Provider
final weekStatsProvider = FutureProvider<List<DailyStats>>((ref) async {
final service = ref.read(statisticsServiceProvider);
return await service.getWeekStats();
});
// 本月统计 Provider
final monthStatsProvider = FutureProvider<List<DailyStats>>((ref) async {
final service = ref.read(statisticsServiceProvider);
return await service.getMonthStats();
});
// 今日统计列表 Provider用于日视图只返回今日数据
final todayStatsListProvider = FutureProvider<List<DailyStats>>((ref) async {
final service = ref.read(statisticsServiceProvider);
final todayStats = await service.getTodayStats();
return [todayStats];
});
// 今日 Top 应用 Provider
final todayTopAppsProvider = FutureProvider<List<AppUsage>>((ref) async {
final service = ref.read(statisticsServiceProvider);
final now = DateTime.now();
final startOfDay = DateTime(now.year, now.month, now.day);
final endOfDay = startOfDay.add(const Duration(days: 1));
return await service.getTopApps(
startTime: startOfDay,
endTime: endOfDay,
limit: 5,
);
});
// 刷新今日统计 Provider
final refreshTodayStatsProvider = FutureProvider.family<DailyStats, void>((ref, _) async {
final service = ref.read(statisticsServiceProvider);
return await service.refreshTodayStats();
});