No description
|
|
||
|---|---|---|
| android | ||
| integration_test | ||
| ios | ||
| lib | ||
| linux | ||
| macos | ||
| rust | ||
| rust_builder | ||
| test_driver | ||
| web | ||
| windows | ||
| .gitignore | ||
| .metadata | ||
| analysis_options.yaml | ||
| changelog.md | ||
| flutter_rust_bridge.yaml | ||
| pubspec.lock | ||
| pubspec.yaml | ||
| README.md | ||
| renovate.json | ||
timetracker
A cross-platform time tracker built with Flutter for the frontend and Rust for the backend logic. Communication is handled via flutter_rust_bridge, and data is stored locally on the device using SQLite. The user interface adapts to the native look-and-feel of Android and iOS thanks to flutter_platform_widgets.
Features
- Time Tracking: Start and stop time tracking entries.
- Tag Management:
- Create new tags.
- List all tags.
- Edit tag names (via swipe gesture).
- Delete tags (via swipe gesture, includes confirmation). Associated time entries will have their tag set to NULL.
- Local Storage: All data is securely stored in a local SQLite database on the device (managed by Rust).
- Reporting:
- Display time entries filtered by period (Day, Week, Month, Year) and optionally by tag.
- Total duration display for the filtered period.
- Visualization using charts (
fl_chart):- Bar chart: Distribution of daily time spent per tag for the selected period.
- List view for report entries.
- Pull-to-Refresh: Manually refresh report data.
- Swipe-to-Delete: Delete individual time entries directly from the report list via swipe gesture (with confirmation).
- Platform-Adaptive UI: Uses
flutter_platform_widgetsto provide a native appearance on Android (Material Design) and iOS (Cupertino).
Technologies
- Frontend: Flutter / Dart
- State Management:
provider - UI Adaptation:
flutter_platform_widgets - Charts:
fl_chart - Swipe Actions:
flutter_slidable - Intl:
intl
- State Management:
- Backend: Rust
- Database: SQLite (via
rusqlite) - Error Handling:
anyhow - Logging:
log
- Database: SQLite (via
- Bridge:
flutter_rust_bridge - Build: Cargo, Flutter Build Tools, Gradle (Android), Xcode (iOS)
Architecture
The app follows a clear separation between UI and logic:
Flutter UI (Widgets) <-> Dart Service Layer (TimeTrackingService) <-> flutter_rust_bridge (Generated Bindings) <-> Rust API (api.rs) <-> Rust DB Logic (database.rs) <-> SQLite Database
Contributing
Contributions are welcome! Please create an issue to report bugs or suggest new features. Pull requests are also welcome.
License
[MIT License]