Skip to content

kldev/fit26-app

Repository files navigation

Fit26 - Aplikacja do śledzenia codziennych ćwiczeń

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.

Funkcjonalności

Typy aktywności

  • 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

Ekrany

  1. Dziś - główny ekran z formularzem dodawania wpisów i listą dzisiejszych aktywności
  2. Historia - przeglądanie wpisów z poprzednich dni (w budowie)
  3. Statystyki - wykresy i podsumowania (w budowie)
  4. Ustawienia - konfiguracja motywu, import/export danych

Stack technologiczny

  • 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

Instalacja i uruchomienie

Wymagania

  • Flutter SDK (wersja 3.29 lub nowsza)
  • Dart SDK (wersja 3.7 lub nowsza)
  • Dla Androida: ADB i USB Debugging włączony na telefonie

Szybkie uruchomienie (Development)

Najszybszy sposób na uruchomienie aplikacji z hot reload:

./dev.sh

Ten skrypt automatycznie:

  • Pobierze zależności (flutter pub get)
  • Wygeneruje kod (build_runner)
  • Uruchomi aplikację w trybie debug z hot reload

Deploy na telefon Android

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 -p

Opcje:

  • -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:

  1. Telefon jest podłączony przez USB
  2. USB Debugging jest włączony w opcjach deweloperskich
  3. Zaakceptowałeś autoryzację ADB na telefonie

Ręczna instalacja (krok po kroku)

  1. Sklonuj repozytorium:
git clone <repo-url>
cd fit26
  1. Zainstaluj zależności:
flutter pub get
  1. Wygeneruj kod (Freezed, Drift, Riverpod):
dart run build_runner build --delete-conflicting-outputs
  1. Uruchom aplikację:
flutter run

Uruchomienie testów

flutter test

Pre-commit check

Przed commitem możesz uruchomić automatyczne sprawdzenie:

./pre_commit_check.sh

Skrypt sprawdzi:

  • ✅ Formatowanie kodu
  • ✅ Brak błędów (flutter analyze)
  • ✅ Testy przechodzą
  • ✅ Build się kompiluje

Budowanie APK ręcznie

# 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.apk

Struktura projektu

lib/
  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

Architektura

Aplikacja wykorzystuje czyste warstwy:

  • Domain - modele, logika biznesowa, serwisy
  • Data - baza danych, repozytoria
  • Features - ekrany i ich logika (UI)
  • Shared - współdzielone komponenty

Design System

Tokeny designu

Wszystkie kolory, spacing, promienie i typografia są zdefiniowane w lib/app/theme/tokens.dart.

Aby dostosować wygląd aplikacji:

  1. Otwórz lib/app/theme/tokens.dart
  2. Zmodyfikuj wartości w AppTokens.light lub AppTokens.dark
  3. Hot reload aplikacji

Komponenty

  • AppCard - karty z zaokrąglonymi rogami
  • EmptyState - stan pusty z ikoną i tekstem
  • Gap* - spacing helpers (Gap8, Gap16, etc.)

Walidacja

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ń

Import/Export

Export do JSON

  1. Przejdź do Ustawienia
  2. Kliknij "Eksportuj do JSON"
  3. Plik zostanie zapisany w katalogu dokumentów

Import z JSON

  1. Przejdź do Ustawienia
  2. Kliknij "Importuj z JSON"
  3. Wybierz plik JSON
  4. W razie konfliktu (ten sam ID) wygrywa nowszy updatedAt

Baza danych

Aplikacja używa SQLite z biblioteką Drift. Baza jest przechowywana lokalnie w:

<app_documents_directory>/fit26.sqlite

Tabele

  • entries - główne wpisy aktywności
  • gym_exercises - podćwiczenia siłowni (FK do entries)

Rozszerzanie aplikacji

Dodawanie nowego typu aktywności

  1. Dodaj enum w lib/domain/models/enums.dart
  2. Zaktualizuj walidację w lib/domain/services/validation_service.dart
  3. Dodaj UI w formularzu lib/features/today/widgets/add_entry_dialog.dart

Dodawanie nowego ekranu

  1. Utwórz folder w lib/features/<nazwa>/
  2. Dodaj screen, providery i widgety
  3. Dodaj route w lib/app/router.dart
  4. Dodaj pozycję w BottomNavigationBar

Licencja

Ten projekt jest demonstracją kompletnej aplikacji Flutter.

Autor

Wygenerowane przy pomocy Claude Code

About

Flutter Agent Made App

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published