Login Vault (Android)

Aplikasi Flutter untuk menyimpan login & data pribadi di database lokal Android. Semua data tersimpan di perangkat (offline-first, tanpa server).

  • Minimum Android: 10 (API 29)
  • Compile / Target SDK: 36
  • Package: com.omahcitra.loginvault

Fitur

  • Autentikasi lokal — registrasi/login via email + password aplikasi. Email disimpan di secure storage sebagai identitas.
  • Login dengan sidik jari (biometric) — setelah registrasi, kamu dapat mengaktifkan fingerprint di Pengaturan. Saat membuka aplikasi, dialog sidik jari muncul otomatis dan mem-bypass form email/password bila verifikasi sukses. Bila dibatalkan, tetap bisa login manual.
  • Session timeout — login otomatis logout setelah periode tanpa aktivitas (default 3 menit, bisa diubah: 5/10/15/30/60 menit atau Selamanya).
  • Penyimpanan lokal terenkripsi — tiap entri punya:
    • id : String, unik (primary key)
    • content : String, disimpan terenkripsi (XOR + base64) menggunakan constant key (AppConstants.encryptionKey)
  • Dashboard:
    1. Text search yang mencari id di local DB setiap kali pengetikan (live filter, tampil sebagai list id)
    2. Klik item list → konten ditampilkan di bawahnya (expandable)
    3. Swipe ke kiri untuk hapus → muncul dialog konfirmasi
    4. Tombol edit di tiap list untuk ubah konten
  • Menu Pengaturan:
    • Ubah password aplikasi
    • Aktifkan/nonaktifkan login sidik jari (dengan dialog konfirmasi)
    • Atur session timeout
    • Backup & Restore: export vault terenkripsi ke file lokal (Download/loginvault/*.enc), restore dari file tersebut
    • Ganti tema: Gelap (Dark) atau Sistem (System)
  • Menu Exit — keluar dari aplikasi

Arsitektur & Keamanan

lib/
├── constants.dart          # AppConstants: encryptionKey (constant), session keys
├── encryptor.dart          # XOR + base64 obfuscation (constant key)
├── database_helper.dart    # sqflite: tabel 'vault' (id PK, content)
├── auth_service.dart       # register/login, secure storage, biometric, session
├── theme_provider.dart     # theme mode (system/dark), persist via SharedPreferences
├── auth_screen.dart        # login/registrasi adaptif (email+password, bypass fingerprint)
├── dashboard_screen.dart   # search live, list, expand, swipe-delete, edit
├── settings_screen.dart    # ubah password, tema, fingerprint, timeout, backup, exit
├── backup_service.dart     # export/import encrypted vault file (local)
├── vault_entry_dialogs.dart# dialog add/edit/confirm
└── main.dart               # entrypoint + routing + ThemeProvider

Catatan keamanan penting: Enkripsi konten menggunakan constant key (AppConstants.encryptionKey) — ini obfuscation ringan, bukan kriptografi yang aman. Sesuai permintaan ("encrypt base64 dengan key sebagai constant"), konten di-database tidak dapat dibaca langsung tanpa key tersebut. Untuk proteksi produksi, ganti Encryptor dengan AES menggunakan key yang diturunkan dari password aplikasi + flutter_secure_storage (Android Keystore).

Email & password aplikasi disimpan via flutter_secure_storage (ter-enkripsi di Android Keystore). Sidik jari menggunakan plugin local_auth (dialog biometric bawaan Android, memerlukan FlutterFragmentActivity).


Cara build APK

Prasyarat: Flutter SDK (stable), JDK 17, Android SDK (build-tools 34+, platforms 29 & 36).

flutter pub get
flutter build apk --release
# hasil: build/app/outputs/flutter-apk/app-release.apk

Konfigurasi Android

  • android/app/build.gradle.kts: minSdk = 29, compileSdk = 36, targetSdk = 36, applicationId = com.omahcitra.loginvault
  • android/local.properties: sdk.dir=/path/to/android-sdk
  • android/app/src/main/kotlin/.../MainActivity.kt: extends FlutterFragmentActivity (wajib untuk local_auth)
  • AndroidManifest.xml: permission INTERNET (tidak wajib untuk fitur inti, aman dihapus bila tidak ada panggilan jaringan)

APK release di-build dengan debug keystore (signingConfig debug) agar bisa dihasilkan tanpa upload key. Untuk distribusi Play Store, ganti dengan keystore rilis milik Anda.


Instal & jalankan

# mode debug di device/emulator
flutter run

# atau install APK hasil build
adb install build/app/outputs/flutter-apk/app-release.apk

Alur penggunaan

  1. Pertama install → layar registrasi: isi email + password aplikasi.
  2. Setelah login → Dashboard:
    • Ketik di kolom pencarian untuk filter id secara live.
    • Tap sebuah id → kontennya muncul di bawah.
    • Swipe kiri pada item → konfirmasi hapus.
    • Tap ikon edit → ubah konten.
    • Tombol + (FAB) → tambah entri baru (id unik + konten).
  3. Pengaturan (ikon gear):
    • Ubah password aplikasi
    • Aktifkan "Login dengan sidik jari" (muncul dialog konfirmasi; batal = tetap off)
    • Atur session timeout
    • Backup & Restore:
      • Backup ke file (lokal): semua entri diekspor terenkripsi (pakai password aplikasi) ke Download/loginvault/loginvault_backup_<timestamp>.enc
      • Restore dari file: pilih file .enc dari folder tersebut → dikembalikan ke DB (merge by id)
    • Ganti tema, atau Exit.

Catatan backup: File .enc terenkripsi dengan password aplikasi, bukan constant key — aman jika dibagikan/copy ke Google Drive. Untuk survive dari crash HP, copy file tersebut ke Google Drive (manual) atau simpan di komputer. Restore butuh password aplikasi yang sama dengan saat backup.


Dependencies utama

Paket Fungsi
sqflite local database SQLite
flutter_secure_storage simpan email & password aplikasi (Keystore)
local_auth login dengan sidik jari (biometric Android)
path_provider akses folder Download (backup)
permission_handler izin storage (backup ke Download)
provider state management (theme)
shared_preferences persist tema & session timeout
crypto utilitas (tidak wajib, tersedia)

© OmahCitra — aplikasi vault login lokal.

Description
Flutter Android app: local login/private data vault (min Android 10). Search-as-you-type, swipe-delete, edit, Google/email auth, dark/system theme.
Readme 56 MiB
Languages
Dart 46.5%
C++ 27%
CMake 20.6%
Swift 2.6%
HTML 1.6%
Other 1.7%