Flutter Android login vault: local DB (id+base64 content), email/Google auth, dashboard search/edit/swipe-delete, dark/system theme, minSdk 29
This commit is contained in:
124
README.md
Normal file
124
README.md
Normal file
@@ -0,0 +1,124 @@
|
||||
# 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)**
|
||||
- Target SDK: 34
|
||||
- Package: `com.omahcitra.loginvault`
|
||||
|
||||
---
|
||||
|
||||
## Fitur
|
||||
|
||||
- **Autentikasi lokal** — registrasi/login pertama kali via **email + password**
|
||||
aplikasi, atau **Google Sign-In**. Email disimpan di local storage sebagai identitas.
|
||||
- **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
|
||||
- Ganti tema: **Gelap (Dark)** atau **Sistem (System)**
|
||||
- **Menu Exit** — keluar dari aplikasi
|
||||
|
||||
---
|
||||
|
||||
## Arsitektur & Keamanan
|
||||
|
||||
```
|
||||
lib/
|
||||
├── constants.dart # AppConstants: encryptionKey (constant), db name
|
||||
├── encryptor.dart # XOR + base64 obfuscation (constant key)
|
||||
├── database_helper.dart # sqflite: tabel 'vault' (id PK, content)
|
||||
├── auth_service.dart # register/login, simpan email + app password (secure storage)
|
||||
├── theme_provider.dart # theme mode (system/dark), persist via SharedPreferences
|
||||
├── auth_screen.dart # registrasi/login (email atau Google)
|
||||
├── dashboard_screen.dart # search live, list, expand, swipe-delete, edit
|
||||
├── settings_screen.dart # ubah password, tema, exit
|
||||
├── 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).
|
||||
|
||||
---
|
||||
|
||||
## Cara build APK
|
||||
|
||||
Prasyarat: Flutter SDK (stable), JDK 17, Android SDK (build-tools 34, platforms
|
||||
29 & 34).
|
||||
|
||||
```bash
|
||||
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`, `targetSdk = 34`,
|
||||
`applicationId = com.omahcitra.loginvault`
|
||||
- `android/local.properties`: `sdk.dir=/path/to/android-sdk`
|
||||
- `AndroidManifest.xml`: permission `INTERNET` (untuk Google Sign-In)
|
||||
|
||||
> 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
|
||||
|
||||
```bash
|
||||
# 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, atau
|
||||
"Lanjut dengan Google".
|
||||
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, ganti tema, atau Exit.
|
||||
|
||||
---
|
||||
|
||||
## Dependencies utama
|
||||
|
||||
| Paket | Fungsi |
|
||||
|-------|--------|
|
||||
| `sqflite` | local database SQLite |
|
||||
| `flutter_secure_storage` | simpan email & password aplikasi (Keystore) |
|
||||
| `google_sign_in` | login dengan Google |
|
||||
| `provider` | state management (theme) |
|
||||
| `shared_preferences` | persist tema |
|
||||
| `crypto` | utilitas (tidak wajib, tersedia) |
|
||||
|
||||
---
|
||||
|
||||
© OmahCitra — aplikasi vault login lokal.
|
||||
Reference in New Issue
Block a user