Repositori ini berisi aplikasi mobile (Flutter) untuk proyek Movezz, sebuah aplikasi sosial media untuk para pecinta olahraga yang terhubung dengan backend Django Movezz.
Sama dengan backend Movezz (PBP):
- Muhamad Hakim Nizami (2406399485)
- Nadin Ananda (2406351806)
- Heraldo Arman (2406420702)
- Roberto Eugenio Sugiarto (2406355640)
- Amberley Vidya Putri (2406495533)
Tonton trailer resmi aplikasi Movezz Mobile yang menampilkan fitur-fitur utama dan pengalaman pengguna yang menarik:
Movezz adalah aplikasi sosial media yang ditujukan untuk pecinta olahraga: penggemar sepak bola, pelari, gym, hingga olahraga rekreasi lainnya. Pengguna dapat:
- Berbagi aktivitas olahraga di feeds,
- Menjelajah profil pengguna lain,
- Berkomunikasi via messaging,
- Mengikuti atau membuat broadcast event olahraga,
- Jual beli perlengkapan olahraga di marketplace.
Repositori ini berfokus pada client Flutter (Android, iOS, Web, Desktop) yang berkomunikasi dengan backend Django Movezz menggunakan session-based auth (cookie).
Struktur fitur di Flutter dibuat agar mirip dengan modularisasi di backend Django:
PIC: Muhamad Hakim Nizami
Folder: lib/features/feeds
Fitur:
- Menampilkan timeline aktivitas olahraga pengguna,
- Card posting (
post_card.dart) dan komentar (comment_bottom_sheet.dart), - Halaman feed utama (
feeds_page.dart/feed_page.dart), - Integrasi dengan endpoint feed backend.
PIC: Nadin Ananda
Folder: lib/features/profile
Fitur:
- halaman profil pengguna (
profile_page.dart) - tabs untuk melihat post dan broadcast
- integrasi untuk menampilkan postingan dan informasi pengguna
- edit profile (display name dan upload profile picture)
- create posts pengguna
- tampilan followers, post, following
PIC: Heraldo Arman
Folder: lib/features/messages
Fitur:
- Halaman daftar pesan (
messages_page.dart), - Widget pesan (
messages_widget.dart), - Persiapan integrasi dengan modul chat/messaging backend.
PIC: Amberley Vidya Putri
Folder: lib/features/marketplace
Fitur:
- Halaman marketplace (
marketplace_page.dart), - Widget listing marketplace (
marketplace_widget.dart), - Struktur data dan repository untuk listing barang olahraga.
PIC: Roberto Eugenio Sugiarto
Folder: lib/features/broadcast
Fitur:
- Halaman broadcast/event (
broadcast_page.dart), - Widget event (
broadcast_widget.dart), - Integrasi dengan modul broadcast backend (event publik, siaran, dsb).
PIC: all
Folder: lib/features/auth
Fitur:
- Autentikasi menggunakan session cookie dari backend Django melalui
CookieRequest.
Aplikasi Flutter ini berinteraksi penuh dengan aplikasi web (backend Django) yang telah dikembangkan pada Proyek Tengah Semester (PTS) melalui Pacil Web Service. Seluruh data yang ditampilkan di aplikasi mobile bersumber dari backend yang sama dengan yang digunakan oleh aplikasi web, sehingga memastikan konsistensi data di kedua platform.
Diagram berikut menunjukkan alur integrasi data secara visual:
Alur integrasi datanya adalah sebagai berikut:
-
Aksi Pengguna di Aplikasi Flutter: Pengguna melakukan aksi seperti login, melihat feeds, atau memposting konten baru melalui antarmuka aplikasi Flutter.
-
Pemanggilan Controller dan Repository: Aksi pengguna memicu pemanggilan fungsi di dalam Controller (misalnya,
FeedsController). Controller kemudian memanggil Repository yang bertugas sebagai perantara antara layer data dan layer presentasi. -
Permintaan HTTP oleh DataSource: Repository memanggil Remote DataSource, yang bertanggung jawab untuk membuat permintaan HTTP ke backend Django. Permintaan ini menggunakan library
pbp_django_auth(CookieRequest) untuk berkomunikasi dengan API. -
Akses Endpoint API di Backend Django: Backend Django menerima permintaan pada endpoint yang sesuai (misalnya,
GET /feeds/api/posts/). View di Django akan memproses permintaan tersebut, berinteraksi dengan model dan database jika diperlukan. -
Serialisasi Data ke JSON: Setelah data didapatkan dari database, Django (menggunakan Django REST Framework) akan melakukan serialisasi data dari objek Python (QuerySet) menjadi format JSON.
-
Pengiriman Respons JSON: Backend mengirimkan respons HTTP yang berisi data dalam format JSON kembali ke aplikasi Flutter.
-
Deserialisasi dan Pembaruan State: Aplikasi Flutter menerima respons JSON. DataSource atau Repository akan melakukan deserialisasi (parsing) dari JSON menjadi objek Dart (model). Data ini kemudian digunakan oleh Controller untuk memperbarui state aplikasi (misalnya, daftar postingan di feeds).
-
Pembaruan Antarmuka (UI): Berkat state management (Provider), perubahan pada state akan secara otomatis memperbarui antarmuka pengguna, sehingga data terbaru dari backend akan ditampilkan kepada pengguna.
Dengan alur ini, aplikasi Flutter berfungsi sebagai client yang menampilkan dan mengelola data, sementara semua logika bisnis, validasi, dan interaksi dengan database ditangani oleh backend Django yang sama dengan yang digunakan oleh PWS.
Struktur folder utama (disederhanakan):
lib/
core/
config/
app_config.dart # Konfigurasi statis aplikasi (nama, versi, page size, dll.)
env.dart # Konfigurasi base URL backend (BACKEND_BASE_URL)
routing/
app_router.dart # Definisi route & onGenerateRoute
theme/
app_theme.dart # Tema global (light/dark)
utils/
extensions.dart # Extension helper (String, BuildContext, DateTime, dll.)
widgets/
app_button.dart # Button standar aplikasi
app_text_field.dart # TextField standar aplikasi
features/
auth/
data/
datasources/
models/
repositories/
presentation/
controllers/
pages/
widgets/
feeds/
profile/
broadcast/
marketplace/
messages/
shared/
models/
lorem_model.dart # Contoh model shared
main.dart # Entry point Flutter (MaterialApp + routing + provider)
Pola umum per fitur:
data/models→ representasi JSON dari backend (DTO / model),data/datasources→ call HTTP ke backend (viaCookieRequest),data/repositories→ abstraksi data untuk layer UI,presentation/controllers→ state management (ChangeNotifier, dsb.),presentation/pages→ screen / halaman,presentation/widgets→ komponen UI kecil.
Di root proyek terdapat:
.env– konfigurasi environment lokal (untuk tim),.env.example– contoh template variabel environment.
Pada sisi Flutter, base URL backend dibaca melalui Env.backendBaseUrl:
// lib/core/config/env.dart
static const String backendBaseUrl = String.fromEnvironment(
'BACKEND_BASE_URL',
defaultValue: 'http://10.0.2.2:8000',
);Artinya:
- Default mengarah ke
http://10.0.2.2:8000(akses localhost dari Android emulator), - Bisa dioverride dengan
--dart-define.
BACKEND_BASE_URL=http://10.0.2.2:8000Developer bisa menyalin:
cp .env.example .env
# lalu edit BACKEND_BASE_URL sesuai environment masing-masingFile: lib/core/network/cookie_request.dart
Aplikasi ini menggunakan library CookieRequest (adaptasi dari pbp_django_auth) untuk:
- Login/logout ke endpoint Django,
- Menyimpan cookie
sessioniddiSharedPreferences, - Mengirim header
Cookiepada request berikutnya, - Menentukan status
loggedIndan menyimpanjsonDataterakhir.
Cara pakai di data source:
import 'package:movezz_mobile/core/config/env.dart';
import 'package:movezz_mobile/core/network/cookie_request.dart';
class AuthRemoteDataSource {
final CookieRequest cookieRequest;
AuthRemoteDataSource(this.cookieRequest);
Future<Map<String, dynamic>> login(String username, String password) async {
final url = Env.api('/auth/login-flutter/');
return await cookieRequest.login(url, {
'username': username,
'password': password,
});
}
}git clone https://github.com/E1PBP/movezz_mobile.git
cd movezz_mobileJalankan backend Movezz (repositori Django):
git clone https://github.com/E1PBP/movezz.git
cd movezz
# setup virtualenv, install requirements, migrate, lalu:
python manage.py runserverSecara default backend akan berjalan di http://127.0.0.1:8000/.
Salin contoh .env:
cp .env.example .env
# lalu edit nilai BACKEND_BASE_URL jika perluContoh untuk emulator Android:
BACKEND_BASE_URL=http://10.0.2.2:8000flutter pub getflutter run \
--dart-define=BACKEND_BASE_URL=http://10.0.2.2:8000flutter run -d chrome \
--dart-define=BACKEND_BASE_URL=http://localhost:8000Sesuaikan URL dengan alamat backend Django kamu.
-
Frontend:
-
Backend (terpisah):
- Django 5
- PostgreSQL
- Cloudinary (media storage)
-
Tools:
- Provider (state management dasar)
- SharedPreferences (persistent storage sederhana)
- http
- goRoutes
- pbp_django_auth
-
Repository Backend Django:
https://github.com/E1PBP/movezz -
PWS (Deployment Backend):
https://muhamad-hakim41-movezz.pbp.cs.ui.ac.id/ -
Figma Design:
https://www.figma.com/design/x4q0GDfJB0dQ2ZXl8uuXDZ/Design-Movezz -
DB Diagram:
https://dbdiagram.io/d/movezz-2-68e696cad2b621e422e8abc6 -
Tautan SlidesDeck:
https://www.canva.com/design/DAG8IEoBBuU/nSQTk7X6RqDyRcZvv83GVQ/edit?utm_content=DAG8IEoBBuU&utm_campaign=designshare&utm_medium=link2&utm_source=sharebutton -
Tautan Video:
https://youtu.be/X3Xf6GiEsYc?si=2cubzyjOpC_gYUsa

