- Add environment configuration section with flavor commands - Document specialization topic (Testing) - Add testing strategy section with test structure
5.8 KiB
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
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
# Install dependencies
flutter pub get
# Generate localizations
flutter gen-l10n
# Run on Android (with backend running)
flutter run
Environment Configuration
The app supports multiple environments via flavor configuration:
# Development (default)
flutter run
flutter run -t lib/main_dev.dart
# Production
flutter run -t lib/main_prod.dart --release
# With explicit environment variable
flutter run --dart-define=ENV=prod
Configuration is managed in lib/core/config/app_config.dart.
Specialization Topic
Testing + Internationalization
This project focuses on two specialization areas for the HFTM Mobile Computing course:
- Testing: Comprehensive test coverage with unit, widget, and integration tests
- Internationalization: Full i18n support with English and German, locale-aware date formatting
Testing Strategy
The project follows a multi-layered testing approach:
Unit Tests
- Domain Layer: Entity validation, enum behavior
- Data Layer: Model serialization/deserialization (JSON)
- Presentation Layer: ViewModel business logic with mocked repositories
Widget Tests
- Component rendering and display
- User interactions (tap, input)
- State changes and callbacks
Integration Tests
- End-to-end user flows
- Navigation between screens
- Task creation and management lifecycle
Running Tests
# Run all unit and widget tests
flutter test
# Run with coverage
flutter test --coverage
# Run integration tests (requires device/emulator)
flutter test integration_test
# Run specific test file
flutter test test/features/tasks/presentation/viewmodels/daily_tasks_viewmodel_test.dart
Test Structure
test/
├── features/
│ ├── auth/
│ │ ├── data/models/ # Model serialization tests
│ │ └── domain/entities/ # Entity tests
│ ├── tasks/
│ │ ├── data/models/
│ │ ├── domain/
│ │ └── presentation/
│ │ ├── viewmodels/ # ViewModel unit tests
│ │ └── widgets/ # Widget tests
│ └── onboarding/
└── helpers/ # Test utilities
integration_test/
└── app_test.dart # End-to-end tests
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
- Create a new ARB file:
lib/l10n/app_XX.arb - Copy content from
app_en.arband translate - Run
flutter gen-l10n - Add the locale to
supportedLocalesinSettingsViewModel
License
This project is part of a course at HFTM (Höhere Fachschule für Technik Mittelland).