- Flutter frontend with Provider state management - FastAPI backend with SQLAlchemy ORM - Internationalization support (EN/DE) - Clean Architecture folder structure - GoRouter for navigation - GetIt for dependency injection
154 lines
3.8 KiB
Markdown
154 lines
3.8 KiB
Markdown
# 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).
|