Skip to content

alfaragatak87/traceface

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

16 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ•΅οΈβ€β™‚οΈ TraceFace: Sistem Deteksi & Pelaporan Orang Hilang Berbasis Biometrik Wajah

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.

TraceFace App Flutter SQLite


πŸ“‘ Daftar Isi

  1. Latar Belakang & Literatur
  2. Teknologi & Tools
  3. Arsitektur Proyek
  4. Alur Aplikasi (Flowchart)
  5. Struktur Direktori & Pohon File
  6. Penjelasan Detail Per-File
  7. Panduan Instalasi (Tutorial Pemasangan)

1. Latar Belakang & Literatur

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:

  1. CameraX / Camera2 API (via image_picker) untuk menangkap data biometrik visual (foto).
  2. SQLite Database untuk manajemen penyimpanan data offline berskala besar.
  3. Android NotificationManager (via flutter_local_notifications) untuk mengirim pesan siaga (alert) lokal langsung ke tray perangkat pengguna.
  4. SharedPreferences untuk mengelola session token dan status login Admin tanpa membebani sistem basis data utama.

2. Teknologi & Tools

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.

3. Arsitektur Proyek

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
Loading

4. Alur Aplikasi (Flowchart)

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
Loading

5. Struktur Direktori & Pohon File

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

6. Penjelasan Detail Per-File

Berikut adalah dokumentasi akurat mengenai tiap baris logika utama di masing-masing file:

A. Konfigurasi Inti

  • lib/main.dart
    • Fungsi: Titik masuk (Entry Point) utama aplikasi.
    • Baris Penting: Di void main(), terdapat perintah WidgetsFlutterBinding.ensureInitialized() dan inisiasi database lokal. File ini juga menampung kelas AdminMainScreen dan UserMainScreen yang mengatur Bottom Navigation Bar (tombol navigasi bawah).

B. Manajemen Database (SQLite)

  • 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_cases untuk kasus, CREATE TABLE users untuk akun petugas, dan CREATE TABLE messages untuk menampung pesan. Menggunakan _version = 2 sebagai 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(), dan loginAdmin(). Pada loginAdmin, sandi di-hash menggunakan SHA-256 demi keamanan tingkat tinggi (crypto package).

C. Antarmuka (Pages)

  • 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.
  • 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 logika random.nextDouble() > 0.4 yang 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 ImagePicker untuk menangkap wajah target yang hilang dan StorageService untuk menyalin file gambar ke folder internal Android secara absolut.
  • 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 dengan markMessageAsRead().

7. Panduan Instalasi (Tutorial Pemasangan)

Bagi Anda atau teman Anda yang ingin menjalankan atau memodifikasi kode ini (melalui git clone), ikuti langkah berikut:

Persiapan Perangkat

  1. Instal Flutter SDK: Pastikan Flutter terpasang di komputer Anda. Panduan Instalasi Flutter.
  2. Instal Android Studio: Digunakan sebagai emulator atau kompiler utama.
  3. Download Proyek: Buka Command Prompt / Terminal dan ketik:
    git clone https://github.com/alfaragatak87/traceface.git

Menjalankan Aplikasi

  1. Buka folder proyek di dalam terminal atau VS Code:
    cd traceface
  2. Unduh semua paket/komponen yang dibutuhkan (sqflite, image_picker, dll):
    flutter pub get
  3. Sambungkan HP Android Anda melalui kabel USB (pastikan USB Debugging aktif), atau nyalakan Emulator Android.
  4. Jalankan aplikasi:
    flutter run

Mengakses Akun Admin

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

About

TraceFace πŸ•΅οΈβ€β™‚οΈ - Aplikasi mobile cerdas (Local-First) untuk pendataan, pemindaian, dan pelaporan orang hilang menggunakan biometrik pengenalan wajah.

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Packages

 
 
 

Contributors

Languages