1.8 KiB
1.8 KiB
Feature: Export
Supported Formats
| Format | Package | Use case |
|---|---|---|
| CSV | csv |
Spreadsheet import (Excel, etc.) |
pdf |
Printable report | |
| JSON | dart:convert |
Backup / data portability |
CSV Schema
id,project,start_time,end_time,duration_seconds,note,tags
42,My Project,2026-07-01T08:00:00,2026-07-01T10:30:00,9000,"Standup",planning|backend
- Date format: ISO 8601
- Tags: pipe-separated within the cell
- Encoding: UTF-8 with BOM for Excel compatibility
PDF Layout
- Header: App name + export date + selected period
- Summary table: Project | Total hours | % of total
- Entries table: Date | Project | Duration | Note | Tags
- Footer: Generated by Timetrack
Use pw.Document from the pdf package.
Render with pw.Table, pw.Text, pw.Chart (optional).
JSON Schema
{
"exportedAt": "2026-07-12T10:00:00Z",
"version": 1,
"projects": [ { "id": 1, "name": "...", "color": -16711936 } ],
"tags": [ { "id": 1, "name": "backend" } ],
"entries": [
{
"id": 42, "projectId": 1, "startTime": "...", "endTime": "...",
"durationSeconds": 9000, "note": "...", "tagIds": [1]
}
]
}
JSON export can be used as a full backup and re-imported in a future version.
Share Flow
final file = await _buildExportFile(format); // write to temp dir
await Share.shareXFiles([XFile(file.path)], // share_plus
subject: 'Timetrack Export ${DateFormat.yMd().format(DateTime.now())}');
Always write to getTemporaryDirectory() — never to arbitrary paths.
Export Scope
- User selects: date range + format + optional project filter
- Available from Settings screen and Reports screen (share button)