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:
- Text search yang mencari
iddi local DB setiap kali pengetikan (live filter, tampil sebagai list id) - Klik item list → konten ditampilkan di bawahnya (expandable)
- Swipe ke kiri untuk hapus → muncul dialog konfirmasi
- Tombol edit di tiap list untuk ubah konten
- Text search yang mencari
- 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, gantiEncryptordengan 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.loginvaultandroid/local.properties:sdk.dir=/path/to/android-sdkandroid/app/src/main/kotlin/.../MainActivity.kt: extendsFlutterFragmentActivity(wajib untuklocal_auth)AndroidManifest.xml: permissionINTERNET(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
- Pertama install → layar registrasi: isi email + password aplikasi.
- Setelah login → Dashboard:
- Ketik di kolom pencarian untuk filter
idsecara 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).
- Ketik di kolom pencarian untuk filter
- 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
.encdari folder tersebut → dikembalikan ke DB (merge by id)
- Backup ke file (lokal): semua entri diekspor terenkripsi (pakai
password aplikasi) ke
- Ganti tema, atau Exit.
Catatan backup: File
.encterenkripsi 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.