TraceFace adalah sebuah aplikasi mobile yang dirancang khusus untuk memfasilitasi publik dan admin dalam mendata, mencari, dan memindai wajah orang yang dilaporkan hilang.
Proyek ini dibangun dari nol dengan mengedepankan fungsionalitas 100% Offline (Local First) guna memastikan akses data dan ketersediaan sistem.
- Latar Belakang & Literatur
- Teknologi & Tools
- Arsitektur Proyek
- Alur Aplikasi (Flowchart)
- Struktur Direktori & Pohon File
- Penjelasan Detail Per-File
- Panduan Instalasi (Tutorial Pemasangan)
Latar Belakang (Data Pendukung): Pencarian orang hilang sering kali memakan waktu yang lama karena penyebaran informasi yang tidak merata dan kurangnya alat bantu identifikasi di lapangan. Masyarakat awam mungkin berpapasan dengan orang hilang, namun tidak menyadarinya. TraceFace dirancang untuk menjembatani celah ini melalui Metodologi Identifikasi Biometrik Partisipatif.
Metode & Desain:
- Desain UI/UX (Glassmorphism & Clean Design): Menggunakan palet warna biru kepolisian dipadukan dengan efek kaca (glassmorphism) agar aplikasi terlihat modern, profesional, namun tetap mudah digunakan oleh semua kalangan.
- Metode Simulasi Probabilitas: Dalam mode lokal, fitur Face Scan diimplementasikan menggunakan algoritma acak (60% cocok, 40% tidak dikenali) untuk menyimulasikan sistem deteksi wajah.
Nyawa Utama (Core Android Components) yang Digunakan: Di bawah kap Flutter, aplikasi ini banyak memanfaatkan native component Android, di antaranya:
- CameraX / Camera2 API (via
image_picker) untuk menangkap data biometrik visual (foto). - SQLite Database untuk manajemen penyimpanan data offline berskala besar.
- Android NotificationManager (via
flutter_local_notifications) untuk mengirim pesan siaga (alert) lokal langsung ke tray perangkat pengguna. - SharedPreferences untuk mengelola session token dan status login Admin tanpa membebani sistem basis data utama.
Aplikasi ini dikembangkan menggunakan kolaborasi perangkat lunak tingkat tinggi:
- Antigravity (AI Agent): Digunakan sebagai Asisten Pemrogram Utama dalam mendesain arsitektur offline-first, memisahkan role (Publik vs Admin), dan menata logika basis data SQLite.
- Android Studio & Flutter SDK: Environment utama untuk kompilasi kode Dart menjadi aplikasi Native Android (.apk).
- SQLite (sqflite): Relational database ringan yang hidup di dalam perangkat genggam.
- Shared Preferences: Untuk penyimpanan sesi login (autentikasi lokal).
- Image Picker: Akses langsung ke sensor kamera perangkat.
Proyek ini menggunakan pola desain Model-View-Controller/Service (MVC/S) yang dimodifikasi. Semua logika data (Repository) sepenuhnya dipisahkan dari antarmuka pengguna (View/Pages).
graph TD
Start(("Buka Aplikasi")) --> B("Halaman Pembuka (Splash)")
%% Alur Pengecekan Sesi
B -->|Sesi Kosong| C["Beranda Publik"]
B -->|Sudah Login| H["Beranda Petugas (Admin)"]
%% Alur Publik
C --> D("Pindai Wajah")
C --> D2("Lapor Kasus Baru")
D --> E{"Mirip di Database?"}
E -->|Ya| F["Kirim Pesan Temuan"]
E -->|Tidak| G["Tidak Ditemukan"]
D2 --> I[("SQLite Database")]
F --> I
%% Alur Admin (Login manual)
C -.->|Klik Tombol Rahasia| A2("Halaman Masuk (Login)")
A2 -->|Autentikasi Sukses| H
%% Alur Fitur Admin
H --> J("Manajemen Kasus")
H --> K("Kotak Masuk Pesan")
J <-->|Baca/Tulis| I
K <-->|Baca| I
Berikut adalah interaksi fungsionalitas antar pengguna.
sequenceDiagram
autonumber
participant Publik
participant TraceFace
participant Database
participant Admin
Note over Publik,Database: [1] Melaporkan Orang Hilang Baru
Publik->>+TraceFace: Isi form lapor & foto
TraceFace->>+Database: Insert ke tabel 'missing_persons'
Database-->>-TraceFace: Simpan sukses
TraceFace-->>-Publik: Tampilkan notifikasi berhasil
Note over Publik,Database: [2] Pindai Wajah & Pencocokan
Publik->>+TraceFace: Scan wajah via kamera
TraceFace->>+Database: Query pencarian wajah
Database-->>-TraceFace: Return kandidat mirip
TraceFace-->>-Publik: Tampilkan hasil pindai
Note over Publik,Database: [3] Menghubungi Petugas
Publik->>+TraceFace: Klik 'Hubungi Petugas' di profil
TraceFace->>+Database: Insert ke tabel 'messages'
Database-->>-TraceFace: Kirim sukses
TraceFace-->>-Publik: Tampilkan alert terkirim
Note over TraceFace,Admin: [4] Petugas Memeriksa Laporan
Admin->>+TraceFace: Buka Kotak Masuk Pesan
TraceFace->>+Database: Fetch pesan (Urutkan dari terbaru)
Database-->>-TraceFace: Return list pesan
TraceFace-->>-Admin: Tampilkan pesan dari Publik
traceface/
βββ android/ # Kode native Java/Kotlin Android
βββ lib/
β βββ data/
β β βββ pembantu_database.dart # Skema Database (CREATE TABLE)
β β βββ repositori_lokal.dart # Logika CRUD ke SQLite
β βββ models/
β β βββ orang_hilang.dart # Blueprint data orang hilang
β β βββ pesan.dart # Blueprint data pesan/laporan
β βββ pages/
β β βββ halaman_pembuka.dart # [Pintu Masuk] Cek sesi awal
β β β
β β βββ Area Publik (Masyarakat):
β β β βββ beranda_publik.dart # Beranda utama untuk publik
β β β βββ halaman_pindai.dart # Sensor Kamera & Pencocokan Wajah
β β β βββ halaman_lapor.dart # Form lapor orang hilang baru
β β β βββ user_main_screen.dart # Pembungkus navigasi publik
β β β
β β βββ Area Petugas (Admin):
β β βββ halaman_masuk.dart # Layar masuk rahasia Admin
β β βββ beranda_petugas.dart # Dasbor kendali utama Admin
β β βββ halaman_kasus.dart # Manajemen data orang hilang
β β βββ halaman_pesan.dart # Kotak masuk laporan publik
β βββ services/
β β βββ layanan_autentikasi.dart # Manajemen Login/Logout
β β βββ layanan_notifikasi.dart # Notifikasi Tray HP
β β βββ layanan_penyimpanan.dart # Penyimpanan Foto ke folder internal
β βββ theme/
β β βββ tema_aplikasi.dart # Warna, Font, dan Styling global
β βββ widgets/
β β βββ komponen_aplikasi.dart # Komponen UI rakitan (Tombol, Card)
β βββ main.dart # Entry point & Shell navigasi bawah
βββ test/
βββ pubspec.yaml # Daftar dependency (sqflite, image_picker)
βββ update_ke_github.bat # Script sinkronisasi otomatis ke GitHub
Berikut adalah dokumentasi akurat mengenai tiap baris logika utama di masing-masing file:
lib/main.dart- Fungsi: Titik masuk (Entry Point) utama aplikasi.
- Baris Penting: Di
void main(), terdapat perintahWidgetsFlutterBinding.ensureInitialized()dan inisiasi database lokal. File ini juga menampung kelasAdminMainScreendanUserMainScreenyang mengatur Bottom Navigation Bar (tombol navigasi bawah).
lib/data/database_helper.dart- Fungsi: Berisi perintah SQL murni. File ini membuat dan memastikan database hidup di memori Android.
- Baris Penting: Baris
CREATE TABLE missing_casesuntuk kasus,CREATE TABLE usersuntuk akun petugas, danCREATE TABLE messagesuntuk menampung pesan. Menggunakan_version = 2sebagai sistem upgrade bertahap.
lib/data/local_repository.dart- Fungsi: Perantara antara UI dan Database. Jika UI mau menyimpan foto, ia memanggil fungsi di sini.
- Baris Penting:
addCase(),searchByName(),sendMessage(), danloginAdmin(). PadaloginAdmin, sandi di-hash menggunakan SHA-256 demi keamanan tingkat tinggi (cryptopackage).
lib/pages/splash_page.dart- Fungsi: Tampilan logo TraceFace pertama kali. Di sinilah terjadi pengecekan
LocalAuthService.instance.isLoggedIn(). Jika true, dilempar ke Admin; jika false, dilempar ke Publik.
- Fungsi: Tampilan logo TraceFace pertama kali. Di sinilah terjadi pengecekan
lib/pages/scan_page.dart- Fungsi: Ini adalah jantung dari aplikasi. Menghidupkan kamera, membuat viewfinder animasi pemindai wajah (kotak biru), dan melakukan simulasi pencocokan.
- Baris Penting: Di fungsi
_doScan(), terdapat logikarandom.nextDouble() > 0.4yang berarti probabilitas 60% menemukan wajah, dan memanggil fungsi_contactDialog()jika orang publik ingin melapor penemuan.
lib/pages/report_page.dart- Fungsi: Formulir untuk menambahkan orang hilang. Menggunakan
ImagePickeruntuk menangkap wajah target yang hilang danStorageServiceuntuk menyalin file gambar ke folder internal Android secara absolut.
- Fungsi: Formulir untuk menambahkan orang hilang. Menggunakan
lib/pages/cases_page.dart- Fungsi: Etalase kasus. Menampilkan semua korban dalam bentuk List. Untuk publik hanya Read-Only, sedangkan untuk admin terdapat tombol ubah status dan ikon "Tong Sampah" untuk menghapus data.
lib/pages/admin_messages_page.dart- Fungsi: Kotak Masuk Petugas. Menjalankan fungsi
getMessages()dari repository. Mengubah warna kartu pesan menjadi terang jika Unread, dan menjadi abu-abu jika sudah dibaca denganmarkMessageAsRead().
- Fungsi: Kotak Masuk Petugas. Menjalankan fungsi
Bagi Anda atau teman Anda yang ingin menjalankan atau memodifikasi kode ini (melalui git clone), ikuti langkah berikut:
- Instal Flutter SDK: Pastikan Flutter terpasang di komputer Anda. Panduan Instalasi Flutter.
- Instal Android Studio: Digunakan sebagai emulator atau kompiler utama.
- Download Proyek:
Buka Command Prompt / Terminal dan ketik:
git clone https://github.com/alfaragatak87/traceface.git
- Buka folder proyek di dalam terminal atau VS Code:
cd traceface - Unduh semua paket/komponen yang dibutuhkan (
sqflite,image_picker, dll):flutter pub get
- Sambungkan HP Android Anda melalui kabel USB (pastikan USB Debugging aktif), atau nyalakan Emulator Android.
- Jalankan aplikasi:
flutter run
Saat aplikasi sudah berjalan, Anda dapat melakukan Login dengan:
- Ketuk tab Beranda Publik.
- Ketuk tombol hijau "Petugas" di pojok kanan atas.
- Masukkan kredensial administrator rahasia:
- Email:
admin@traceface.com - Sandi:
admin123
- Email: