Kompletna aplikacja mobilna w Flutter (Android) do zapisywania codziennych ćwiczeń. Aplikacja działa offline, używa plikowej bazy danych SQLite i ma prosty, szybki interfejs.
- Rower stacjonarny - czas w minutach
- Siłownia - lista podćwiczeń:
- Bieżnia - czas w minutach
- Ławeczka - wyciskanie - liczba powtórzeń
- Kettlebell - liczba powtórzeń
- Inne - opis + czas lub liczba powtórzeń
- Bieganie - czas w minutach
- Dziś - główny ekran z formularzem dodawania wpisów i listą dzisiejszych aktywności
- Historia - przeglądanie wpisów z poprzednich dni (w budowie)
- Statystyki - wykresy i podsumowania (w budowie)
- Ustawienia - konfiguracja motywu, import/export danych
- Flutter (stable)
- Nawigacja: go_router
- Stan: flutter_riverpod
- Baza danych: drift + sqlite3_flutter_libs + path_provider
- Modele: freezed, json_serializable
- Data/Czas: intl
- Wykresy: fl_chart
- Pliki: file_picker, share_plus
- Flutter SDK (wersja 3.29 lub nowsza)
- Dart SDK (wersja 3.7 lub nowsza)
- Dla Androida: ADB i USB Debugging włączony na telefonie
Najszybszy sposób na uruchomienie aplikacji z hot reload:
./dev.shTen skrypt automatycznie:
- Pobierze zależności (
flutter pub get) - Wygeneruje kod (
build_runner) - Uruchomi aplikację w trybie debug z hot reload
Stworzono wygodny skrypt bash do budowania i instalacji na telefonie:
# Debug build (domyślnie)
./deploy_android.sh
# Release build (zoptymalizowany APK)
./deploy_android.sh -r
# Clean build + release
./deploy_android.sh -c -r
# Profile build (do analizy wydajności)
./deploy_android.sh -pOpcje:
-d- Debug build (domyślnie)-r- Release build-p- Profile build-c- Wyczyść build przed budowaniem-h- Pokaż pomoc
Przed użyciem upewnij się, że:
- Telefon jest podłączony przez USB
- USB Debugging jest włączony w opcjach deweloperskich
- Zaakceptowałeś autoryzację ADB na telefonie
- Sklonuj repozytorium:
git clone <repo-url>
cd fit26- Zainstaluj zależności:
flutter pub get- Wygeneruj kod (Freezed, Drift, Riverpod):
dart run build_runner build --delete-conflicting-outputs- Uruchom aplikację:
flutter runflutter testPrzed commitem możesz uruchomić automatyczne sprawdzenie:
./pre_commit_check.shSkrypt sprawdzi:
- ✅ Formatowanie kodu
- ✅ Brak błędów (flutter analyze)
- ✅ Testy przechodzą
- ✅ Build się kompiluje
# Debug APK
flutter build apk --debug
# Release APK (gotowy do publikacji)
flutter build apk --release
# APK znajduje się w:
# build/app/outputs/flutter-apk/app-release.apklib/
app/
app.dart # Główna aplikacja
router.dart # Konfiguracja nawigacji
theme/
theme.dart # ThemeData dla light/dark
tokens.dart # Design tokens (kolory, spacing, etc.)
data/
db/
database.dart # Definicje tabel Drift
repositories/
entries_repository.dart # Repo dla wpisów
gym_repository.dart # Repo dla ćwiczeń siłowni
domain/
models/
entry.dart # Model Entry (Freezed)
gym_exercise.dart # Model GymExercise (Freezed)
enums.dart # Enumy
services/
validation_service.dart # Walidacja
stats_service.dart # Statystyki i agregacje
import_export_service.dart # Import/Export JSON/CSV
features/
today/ # Ekran "Dziś"
history/ # Ekran "Historia"
stats/ # Ekran "Statystyki"
settings/ # Ekran "Ustawienia"
shared/
widgets/ # Reużywalne komponenty UI
utils/ # Helpery
Aplikacja wykorzystuje czyste warstwy:
- Domain - modele, logika biznesowa, serwisy
- Data - baza danych, repozytoria
- Features - ekrany i ich logika (UI)
- Shared - współdzielone komponenty
Wszystkie kolory, spacing, promienie i typografia są zdefiniowane w lib/app/theme/tokens.dart.
Aby dostosować wygląd aplikacji:
- Otwórz
lib/app/theme/tokens.dart - Zmodyfikuj wartości w
AppTokens.lightlubAppTokens.dark - Hot reload aplikacji
AppCard- karty z zaokrąglonymi rogamiEmptyState- stan pusty z ikoną i tekstemGap*- spacing helpers (Gap8, Gap16, etc.)
Aplikacja waliduje dane przed zapisem:
- Czas trwania: 1-1440 minut
- Powtórzenia: > 0
- Daty: domyślnie nie można dodać przyszłych dat (można zmienić w ustawieniach)
- Ćwiczenie "Inne": wymaga opisu + czasu lub powtórzeń
- Przejdź do Ustawienia
- Kliknij "Eksportuj do JSON"
- Plik zostanie zapisany w katalogu dokumentów
- Przejdź do Ustawienia
- Kliknij "Importuj z JSON"
- Wybierz plik JSON
- W razie konfliktu (ten sam ID) wygrywa nowszy
updatedAt
Aplikacja używa SQLite z biblioteką Drift. Baza jest przechowywana lokalnie w:
<app_documents_directory>/fit26.sqlite
entries- główne wpisy aktywnościgym_exercises- podćwiczenia siłowni (FK do entries)
- Dodaj enum w
lib/domain/models/enums.dart - Zaktualizuj walidację w
lib/domain/services/validation_service.dart - Dodaj UI w formularzu
lib/features/today/widgets/add_entry_dialog.dart
- Utwórz folder w
lib/features/<nazwa>/ - Dodaj screen, providery i widgety
- Dodaj route w
lib/app/router.dart - Dodaj pozycję w BottomNavigationBar
Ten projekt jest demonstracją kompletnej aplikacji Flutter.
Wygenerowane przy pomocy Claude Code