Update README: remove Google login, add biometric + session timeout + FlutterFragmentActivity notes
This commit is contained in:
51
README.md
51
README.md
@@ -4,15 +4,21 @@ Aplikasi Flutter untuk menyimpan **login & data pribadi** di database lokal
|
|||||||
Android. Semua data tersimpan di perangkat (offline-first, tanpa server).
|
Android. Semua data tersimpan di perangkat (offline-first, tanpa server).
|
||||||
|
|
||||||
- Minimum Android: **10 (API 29)**
|
- Minimum Android: **10 (API 29)**
|
||||||
- Target SDK: 34
|
- Compile / Target SDK: 36
|
||||||
- Package: `com.omahcitra.loginvault`
|
- Package: `com.omahcitra.loginvault`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Fitur
|
## Fitur
|
||||||
|
|
||||||
- **Autentikasi lokal** — registrasi/login pertama kali via **email + password**
|
- **Autentikasi lokal** — registrasi/login via **email + password aplikasi**.
|
||||||
aplikasi, atau **Google Sign-In**. Email disimpan di local storage sebagai identitas.
|
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:
|
- **Penyimpanan lokal terenkripsi** — tiap entri punya:
|
||||||
- `id` : `String`, **unik** (primary key)
|
- `id` : `String`, **unik** (primary key)
|
||||||
- `content` : `String`, disimpan terenkripsi (XOR + base64) menggunakan
|
- `content` : `String`, disimpan terenkripsi (XOR + base64) menggunakan
|
||||||
@@ -25,6 +31,8 @@ Android. Semua data tersimpan di perangkat (offline-first, tanpa server).
|
|||||||
4. Tombol **edit** di tiap list untuk ubah konten
|
4. Tombol **edit** di tiap list untuk ubah konten
|
||||||
- **Menu Pengaturan**:
|
- **Menu Pengaturan**:
|
||||||
- Ubah password aplikasi
|
- Ubah password aplikasi
|
||||||
|
- Aktifkan/nonaktifkan login sidik jari (dengan dialog konfirmasi)
|
||||||
|
- Atur session timeout
|
||||||
- Ganti tema: **Gelap (Dark)** atau **Sistem (System)**
|
- Ganti tema: **Gelap (Dark)** atau **Sistem (System)**
|
||||||
- **Menu Exit** — keluar dari aplikasi
|
- **Menu Exit** — keluar dari aplikasi
|
||||||
|
|
||||||
@@ -34,14 +42,14 @@ Android. Semua data tersimpan di perangkat (offline-first, tanpa server).
|
|||||||
|
|
||||||
```
|
```
|
||||||
lib/
|
lib/
|
||||||
├── constants.dart # AppConstants: encryptionKey (constant), db name
|
├── constants.dart # AppConstants: encryptionKey (constant), session keys
|
||||||
├── encryptor.dart # XOR + base64 obfuscation (constant key)
|
├── encryptor.dart # XOR + base64 obfuscation (constant key)
|
||||||
├── database_helper.dart # sqflite: tabel 'vault' (id PK, content)
|
├── database_helper.dart # sqflite: tabel 'vault' (id PK, content)
|
||||||
├── auth_service.dart # register/login, simpan email + app password (secure storage)
|
├── auth_service.dart # register/login, secure storage, biometric, session
|
||||||
├── theme_provider.dart # theme mode (system/dark), persist via SharedPreferences
|
├── theme_provider.dart # theme mode (system/dark), persist via SharedPreferences
|
||||||
├── auth_screen.dart # registrasi/login (email atau Google)
|
├── auth_screen.dart # login/registrasi adaptif (email+password, bypass fingerprint)
|
||||||
├── dashboard_screen.dart # search live, list, expand, swipe-delete, edit
|
├── dashboard_screen.dart # search live, list, expand, swipe-delete, edit
|
||||||
├── settings_screen.dart # ubah password, tema, exit
|
├── settings_screen.dart # ubah password, tema, fingerprint, timeout, exit
|
||||||
├── vault_entry_dialogs.dart# dialog add/edit/confirm
|
├── vault_entry_dialogs.dart# dialog add/edit/confirm
|
||||||
└── main.dart # entrypoint + routing + ThemeProvider
|
└── main.dart # entrypoint + routing + ThemeProvider
|
||||||
```
|
```
|
||||||
@@ -55,14 +63,15 @@ lib/
|
|||||||
> Keystore).
|
> Keystore).
|
||||||
|
|
||||||
Email & password aplikasi disimpan via `flutter_secure_storage` (ter-enkripsi di
|
Email & password aplikasi disimpan via `flutter_secure_storage` (ter-enkripsi di
|
||||||
Android Keystore).
|
Android Keystore). Sidik jari menggunakan plugin `local_auth` (dialog biometric
|
||||||
|
bawaan Android, memerlukan `FlutterFragmentActivity`).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Cara build APK
|
## Cara build APK
|
||||||
|
|
||||||
Prasyarat: Flutter SDK (stable), JDK 17, Android SDK (build-tools 34, platforms
|
Prasyarat: Flutter SDK (stable), JDK 17, Android SDK (build-tools 34+, platforms
|
||||||
29 & 34).
|
29 & 36).
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
flutter pub get
|
flutter pub get
|
||||||
@@ -71,10 +80,13 @@ flutter build apk --release
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Konfigurasi Android
|
### Konfigurasi Android
|
||||||
- `android/app/build.gradle.kts`: `minSdk = 29`, `targetSdk = 36`,
|
- `android/app/build.gradle.kts`: `minSdk = 29`, `compileSdk = 36`,
|
||||||
`applicationId = com.omahcitra.loginvault`
|
`targetSdk = 36`, `applicationId = com.omahcitra.loginvault`
|
||||||
- `android/local.properties`: `sdk.dir=/path/to/android-sdk`
|
- `android/local.properties`: `sdk.dir=/path/to/android-sdk`
|
||||||
- `AndroidManifest.xml`: permission `INTERNET` (untuk Google Sign-In)
|
- `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
|
> APK release di-build dengan **debug keystore** (signingConfig debug) agar
|
||||||
> bisa dihasilkan tanpa upload key. Untuk distribusi Play Store, ganti dengan
|
> bisa dihasilkan tanpa upload key. Untuk distribusi Play Store, ganti dengan
|
||||||
@@ -96,15 +108,18 @@ adb install build/app/outputs/flutter-apk/app-release.apk
|
|||||||
|
|
||||||
## Alur penggunaan
|
## Alur penggunaan
|
||||||
|
|
||||||
1. **Pertama install** → layar registrasi: isi email + password aplikasi, atau
|
1. **Pertama install** → layar registrasi: isi email + password aplikasi.
|
||||||
"Lanjut dengan Google".
|
|
||||||
2. Setelah login → **Dashboard**:
|
2. Setelah login → **Dashboard**:
|
||||||
- Ketik di kolom pencarian untuk filter `id` secara live.
|
- Ketik di kolom pencarian untuk filter `id` secara live.
|
||||||
- Tap sebuah `id` → kontennya muncul di bawah.
|
- Tap sebuah `id` → kontennya muncul di bawah.
|
||||||
- Swipe kiri pada item → konfirmasi hapus.
|
- Swipe kiri pada item → konfirmasi hapus.
|
||||||
- Tap ikon edit → ubah konten.
|
- Tap ikon edit → ubah konten.
|
||||||
- Tombol `+` (FAB) → tambah entri baru (id unik + konten).
|
- Tombol `+` (FAB) → tambah entri baru (id unik + konten).
|
||||||
3. **Pengaturan** (ikon gear): ubah password, ganti tema, atau Exit.
|
3. **Pengaturan** (ikon gear):
|
||||||
|
- Ubah password aplikasi
|
||||||
|
- Aktifkan "Login dengan sidik jari" (muncul dialog konfirmasi; batal = tetap off)
|
||||||
|
- Atur session timeout
|
||||||
|
- Ganti tema, atau Exit.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -114,9 +129,9 @@ adb install build/app/outputs/flutter-apk/app-release.apk
|
|||||||
|-------|--------|
|
|-------|--------|
|
||||||
| `sqflite` | local database SQLite |
|
| `sqflite` | local database SQLite |
|
||||||
| `flutter_secure_storage` | simpan email & password aplikasi (Keystore) |
|
| `flutter_secure_storage` | simpan email & password aplikasi (Keystore) |
|
||||||
| `google_sign_in` | login dengan Google |
|
| `local_auth` | login dengan sidik jari (biometric Android) |
|
||||||
| `provider` | state management (theme) |
|
| `provider` | state management (theme) |
|
||||||
| `shared_preferences` | persist tema |
|
| `shared_preferences` | persist tema & session timeout |
|
||||||
| `crypto` | utilitas (tidak wajib, tersedia) |
|
| `crypto` | utilitas (tidak wajib, tersedia) |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
Reference in New Issue
Block a user