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

 
 
 

Contributors