# Agenda Tasks A calendar-based daily task management application built with Flutter and FastAPI. ## Overview Agenda Tasks helps you manage your daily tasks with a focus on what needs to be done today, not endless lists. Select a day, see your tasks, add new ones, mark them complete, or reschedule them for tomorrow. ## Features - **Daily Agenda View**: See all tasks for a selected day - **Calendar Navigation**: Browse and select dates easily - **Task Management**: Create, edit, delete, and complete tasks - **Priority Levels**: Low, Medium, High with color coding - **Reschedule**: Move tasks to tomorrow with one tap - **Filtering**: View All, Active, or Completed tasks - **Internationalization**: English and German language support - **Dark Mode**: System default, Light, or Dark theme ## Architecture The project follows Clean Architecture principles with a clear separation of concerns: ``` lib/ ├── core/ # Shared utilities, DI, errors, logging ├── features/ │ ├── tasks/ │ │ ├── data/ # Models, DataSources, Repository implementations │ │ ├── domain/ # Entities, Enums, Repository interfaces │ │ └── presentation/# ViewModels, Pages, Widgets │ └── settings/ ├── routing/ # GoRouter configuration └── l10n/ # Localization (ARB files) ``` ### State Management - **Provider** with ViewModel pattern - Each feature has its own ViewModel (ChangeNotifier) - Result pattern for error handling ### Routing Using `go_router` for declarative routing: | Route | Page | |-------|------| | `/` | Daily Agenda | | `/calendar` | Calendar View | | `/task/new?date=YYYY-MM-DD` | Create Task | | `/task/:id/edit` | Edit Task | | `/settings` | Settings | ## Backend REST API built with FastAPI (Python): ``` backend/ ├── app/ │ ├── main.py # FastAPI app │ ├── routes.py # API endpoints │ ├── models.py # SQLAlchemy models │ ├── schemas.py # Pydantic schemas │ ├── services.py # Business logic │ ├── db.py # Database setup │ └── tests/ # Pytest tests └── requirements.txt ``` ### API Endpoints | Method | Endpoint | Description | |--------|----------|-------------| | GET | `/health` | Health check | | GET | `/tasks?date=YYYY-MM-DD` | Get tasks by date | | POST | `/tasks` | Create task | | PUT | `/tasks/{id}` | Update task | | DELETE | `/tasks/{id}` | Delete task | | PATCH | `/tasks/{id}/toggle` | Toggle completion | | POST | `/tasks/{id}/reschedule` | Reschedule task | ## Getting Started ### Prerequisites - Flutter SDK 3.10+ - Python 3.11+ - Android Studio / VS Code ### Backend Setup ```bash cd backend # Create virtual environment python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate # Install dependencies pip install -r requirements.txt # Copy environment file cp .env.example .env # Run server uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 ``` ### Frontend Setup ```bash # Install dependencies flutter pub get # Generate localizations flutter gen-l10n # Run on Android (with backend running) flutter run ``` ### Running Tests **Backend:** ```bash cd backend pytest -v ``` **Frontend:** ```bash flutter test ``` ## Internationalization (i18n) The app supports multiple languages through ARB files in `lib/l10n/`: - `app_en.arb` - English (default) - `app_de.arb` - German ### Adding a New Language 1. Create a new ARB file: `lib/l10n/app_XX.arb` 2. Copy content from `app_en.arb` and translate 3. Run `flutter gen-l10n` 4. Add the locale to `supportedLocales` in `SettingsViewModel` ## License This project is part of a course at HFTM (Höhere Fachschule für Technik Mittelland).