No
Nama
NIM
Role
1
Komang Yoga Ardiana
2401010105
π PM & Fullstack Developer
2
Gede Adprian Pratama
2401010117
π¨ UI/UX & Fullstack Developer
3
I Putu Nova Perwira Andika
2401010112
π» Fullstack Developer
Layer
Teknologi
Keterangan
Frontend
Framework UI cross-platform (Android & iOS)
Backend
BaaS β PostgreSQL Database, Auth, Storage
State Management
Reactive state management (Notifier, AsyncNotifier)
Routing
Deklaratif routing dengan deep linking support
UI Charts
Grafik interaktif (Progress & PR Tracker)
Design
π¨ Dark Mode + Glassmorphism
Palet #010102 dengan aksen hijau neon #CFFF4B
π Struktur Folder lib/
lib/
βββ main.dart # Entry point aplikasi, inisialisasi provider & routing
β
βββ core/ # Konfigurasi inti & utilitas global
β βββ navigation/ # Setup bottom navigation & main wrapper shell
β βββ services/ # Service layer (notifikasi lokal, vibration, dsb.)
β βββ theme/ # Tema aplikasi (warna, ukuran, dark mode config)
β
βββ features/ # Modul fitur (dipisah per domain bisnis)
β βββ auth/ # Autentikasi (Login, Register, Onboarding)
β β βββ models/ # Data model untuk user & auth state
β β βββ pages/ # Halaman UI (Sign In, Sign Up, Onboarding)
β β βββ providers/ # State management (auth notifier/provider)
β β βββ services/ # Repository akses Supabase Auth
β β
β βββ home/ # Dashboard utama
β β βββ pages/ # Halaman Home (Workout Templates & Library)
β β
β βββ workout/ # Manajemen sesi latihan
β β βββ models/ # Model data (Workout, Exercise, Set)
β β βββ pages/ # Halaman Builder, Active Session, Summary
β β βββ providers/ # State workout session & timer
β β βββ repositories/ # Akses data Supabase (CRUD workout)
β β βββ widgets/ # Komponen UI reusable (exercise card, set row)
β β
β βββ history/ # Riwayat latihan
β βββ progress/ # Analitik & pelacakan progres (PR, Body Weight)
β βββ profile/ # Manajemen profil pengguna & BMI Calculator
β
βββ shared/ # Komponen & utilitas yang digunakan lintas fitur
βββ widgets/ # Widget reusable global (buttons, cards, dialogs)
Arsitektur: Menggunakan Feature-First Structure dengan Repository/Service Pattern untuk memisahkan logika bisnis dari UI layer.
Kategori
Fitur
Deskripsi
π Autentikasi
Sign Up & Sign In
Registrasi & login via Email/Password atau Google OAuth
Smart Session Check
Auto-redirect berdasarkan status sesi pengguna di Splash Screen
Onboarding Profil
Pengumpulan data awal: Nama, Tanggal Lahir, Berat, Tinggi, Fitness Goal
π Dashboard
Premium Greeting Card
Sapaan dinamis berdasarkan waktu (Pagi/Siang/Malam) dengan tanggal Indonesia
Workout Templates
Buat, edit, hapus template latihan dengan estimasi durasi & target otot
Exercise Library
Direktori gerakan dengan filter ChoiceChips berdasarkan grup otot
ποΈ Sesi Latihan
Workout Builder
Rakit template dengan drag-and-drop, penambahan set, konversi KG β LBS
Active Tracker
Pencatatan real-time: timer, reps, beban, spontaneous exercise
Rest Timer & Motivasi
Countdown istirahat dengan notifikasi, getaran, & kutipan motivasi
Session Summary
Ringkasan pasca-latihan: volume, durasi, set, dan highlight PR baru
π
Riwayat
Workout Calendar
Kalender visual dengan marker neon pada tanggal latihan
Infinite Scroll History
Daftar riwayat dengan pagination untuk performa optimal
Detail Sesi
Lihat kembali detail gerakan, set, reps, dan beban sesi lampau
π Progress
Statistik Overview
Total sesi, volume angkatan, durasi, konsistensi per minggu
Body Weight Tracker
Grafik fluktuasi berat badan dengan filter 1B / 3B / Semua
Exercise PR Chart
Personal Record per gerakan dengan grafik lintasan & highlight rekor
π€ Profil
Manajemen Akun
Update metrik fisik, fitness goal, dan foto profil (avatar)
Kalkulator BMI
Perhitungan otomatis Body Mass Index berdasarkan data terkini
π Cara Menjalankan Aplikasi
Flutter SDK β₯ 3.x (Install Flutter )
Dart SDK β₯ 3.x (bundled with Flutter)
Akun Supabase (supabase.com )
Android Studio / VS Code dengan Flutter extension
Emulator atau perangkat fisik (Android/iOS)
# 1. Clone repository
git clone https://github.com/yogaarrd/uas_mobile_programing.git
cd uas_mobile_programing
# 2. Install dependencies
flutter pub get
# 3. Buat file .env di root project
# Isi dengan konfigurasi Supabase Anda:
cat > .env << EOF
SUPABASE_URL=your_supabase_url
SUPABASE_ANON_KEY=your_supabase_anon_key
EOF
Buka Supabase Dashboard β SQL Editor , lalu jalankan file SQL dari folder SQL/ dengan urutan berikut:
π Tahap 1 β Import Tabel (sesuai urutan)
Urutan
File
Keterangan
1οΈβ£
SQL/table/table_profiles_supabase.sql
Tabel profil pengguna
2οΈβ£
SQL/table/table_excercise_supabase.sql
Tabel daftar gerakan latihan
3οΈβ£
SQL/table/storage_avatars_supabase.sql
Konfigurasi Supabase Storage untuk avatar
4οΈβ£
SQL/table/table_workout_template.sql
Tabel template & detail workout
5οΈβ£
SQL/table/table_workout_sessions.sql
Tabel sesi latihan & history
6οΈβ£
SQL/table/table_body_measurements.sql
Tabel pencatatan berat badan
β οΈ Penting: Urutan import harus sesuai karena terdapat relasi foreign key antar tabel.
π± Tahap 2 β Import Seeder
File
Keterangan
SQL/seeder/seeder_excercise.sql
Data awal daftar gerakan latihan (exercise library)
SQL/seeder/seeder_progress_tracking.sql
Data awal untuk progress tracking
π Setup Google OAuth Login
Agar fitur Login dengan Google berfungsi, ikuti langkah-langkah berikut:
1. Aktifkan Google Provider di Supabase
Buka Supabase Dashboard β Authentication β Providers
Cari dan aktifkan Google
Anda akan membutuhkan Client ID dan Client Secret dari Google Cloud Console
2. Buat OAuth Credentials di Google Cloud Console
Buka Google Cloud Console
Buat project baru atau pilih project yang sudah ada
Navigasi ke APIs & Services β Credentials
Klik Create Credentials β OAuth Client ID
Pilih Web application sebagai application type
Tambahkan Authorized redirect URI dari Supabase:
https://<YOUR_SUPABASE_PROJECT>.supabase.co/auth/v1/callback
Copy Client ID dan Client Secret , lalu paste ke konfigurasi Google Provider di Supabase Dashboard
3. Konfigurasi Redirect URL di Supabase
Buka Supabase Dashboard β Authentication β URL Configuration
Tambahkan deep link berikut ke Redirect URLs :
io.supabase.gymapp://login-callback/
4. Konfigurasi Deep Link Android
Deep link sudah dikonfigurasi di AndroidManifest.xml dengan scheme:
<data android : scheme =" io.supabase.gymapp" android : host =" login-callback" />
5. Konfigurasi untuk Web (flutter run -d chrome)
Jika menjalankan aplikasi di web , tambahkan konfigurasi berikut:
Buka Supabase Dashboard β Authentication β URL Configuration
Set Site URL ke URL aplikasi web Anda:
Ganti PORT dengan port yang digunakan Flutter web (default biasanya port random, cek di terminal saat flutter run -d chrome)
Tambahkan juga URL tersebut ke Redirect URLs :
π Catatan: Pastikan scheme pada AndroidManifest.xml, Supabase Redirect URLs, dan kode auth_service.dart konsisten. Untuk mobile gunakan io.supabase.gymapp://login-callback/, untuk web gunakan Site URL yang sudah dikonfigurasi.
π‘ Tip: Gunakan flutter run --release untuk menjalankan versi production dengan performa optimal.
π¦ Daftar Package yang Digunakan
Package
Versi
Kegunaan
supabase_flutter
^2.12.4
Backend-as-a-Service: Database, Authentication, dan Storage
flutter_riverpod
^3.3.1
State management reaktif (Notifier, AsyncNotifier, FutureProvider)
go_router
^17.2.3
Deklaratif routing dengan dukungan deep linking & OAuth redirect
flutter_dotenv
^6.0.1
Manajemen environment variable untuk keamanan API Key
fl_chart
^1.2.0
Grafik interaktif (Line Chart untuk progress & PR tracking)
table_calendar
^3.2.0
Widget kalender visual untuk riwayat latihan
flutter_local_notifications
^22.0.1
Notifikasi lokal untuk rest timer antar set
vibration
^3.2.0
Feedback getaran saat rest timer selesai
image_picker
^1.2.2
Pengambilan foto dari galeri/kamera untuk avatar profil
intl
^0.20.2
Internasionalisasi & format tanggal Bahasa Indonesia
provider
^6.1.5+1
State management sederhana untuk navigasi bottom bar
cupertino_icons
^1.0.8
Ikon gaya iOS (Cupertino design)
Login
Register
Home β My Workouts
Home β Workout Library
ποΈ Workout Management
Create Workout
Workout Detail
Choose Exercise
Configure Set & Reps
Workout Created
Workout Session
Rest Session
Workout Finished
Workout Calendar
Session Details
π Progress & Analytics
Progress Overview
Body Weight Tracker
Body Weight Scroll
Add Body Weight
Personal Record (PR)
Profile
Edit Profile
Built with π using Flutter & Supabase
Β© 2026 Moreps Team