1.5 KiB
1.5 KiB
Feature: Reports
Views
| View | Period | Grouping |
|---|---|---|
| Daily | Selected day | Per entry (list) |
| Weekly | Mon–Sun | Per day (bar chart) |
| Monthly | Calendar month | Per week (bar chart) |
Chart Data Format (fl_chart BarChart)
// Weekly: 7 bars (Mon=0 … Sun=6)
List<BarChartGroupData> weeklyBars(Map<int, Duration> durationByWeekday) {
return List.generate(7, (i) => BarChartGroupData(
x: i,
barRods: [BarChartRodData(toY: durationByWeekday[i]?.inMinutes.toDouble() ?? 0)],
));
}
Key Queries (Drift)
// Total duration per project in date range
SELECT project_id, SUM(duration_s) AS total
FROM time_entries
WHERE start_time >= :from AND start_time < :to
AND end_time IS NOT NULL
GROUP BY project_id;
// Duration per weekday in week
SELECT strftime('%w', start_time) AS weekday, SUM(duration_s) AS total
FROM time_entries
WHERE start_time >= :weekStart AND start_time < :weekEnd
AND end_time IS NOT NULL
GROUP BY weekday;
ReportsNotifier
- Exposes
selectedPeriod(day/week/month) andselectedDate - Provides
AsyncValue<ReportData>via Drift watch stream ReportDatacontains: total duration, per-project breakdown, chart bars
Filters
- Filter by project (optional, default: all projects)
- Filter by tag (optional)
- Date navigation: previous/next period buttons
Summary Cards
Each report view shows:
- Total tracked time for period
- Most tracked project
- Average daily hours (weekly/monthly view)