lib/
├── main.dart # Entry point aplikasi
├── models/
│ └── password_model.dart # Model data password
├── database/
│ └── database_helper.dart # Helper untuk operasi database SQFLite
├── services/
│ ├── pin_service.dart # Logika penyimpanan/verifikasi PIN
│ ├── security_service.dart # Derivasi kunci & enkripsi AES-GCM
│ └── backup_service.dart # Ekspor & impor data (terenkripsi)
└── screens/
├── password_list_screen.dart # Halaman daftar password
├── add_edit_password_screen.dart # Halaman tambah/edit password
├── password_detail_screen.dart # Halaman detail password
├── pin_unlock_screen.dart # Halaman verifikasi PIN
├── pin_setup_screen.dart # Halaman pembuatan/ubah PIN
└── backup_restore_screen.dart # Halaman backup & restore
-
Pastikan Flutter sudah terinstall di sistem Anda
-
Install dependencies:
flutter pub get
-
Jalankan aplikasi:
- Android (emulator/device):
flutter run -d android
- iOS (simulator/device, butuh macOS & Xcode):
flutter run -d ios
- Linux desktop:
flutter run -d linux
- Windows desktop:
flutter run -d windows
- macOS desktop:
flutter run -d macos
- Web (Chrome):
flutter run -d chrome
Jika project baru dibuat dari repo ini dan folder platform belum ada, jalankan
flutter create .untuk mengenerate folderandroid,ios,linux,macos,windows, danweb. - Android (emulator/device):
sqflite: ^2.3.0 - Database SQLite untuk Flutterpath: ^1.8.3 - Utility untuk path manipulationintl: ^0.20.2 - Internationalization dan formattingshared_preferences: ^2.2.3 - Menyimpan hash PIN serta status terkuncicrypto: ^3.0.3 - SHA-256 untuk hashing PINsqflite_common_ffi: ^2.3.0 - Dukungan SQFLite di platform desktopsqflite_common_ffi_web: ^1.0.1+2 - Shim SQLite berbasis IndexedDB untuk Webcryptography: ^2.5.0 - PBKDF2 + AES-GCM untuk enkripsi data vaultfile_picker: ^10.3.3 - Dialog pilih file (restore)file_saver: ^0.3.1 - Simpan file (export) lintas platformshare_plus: ^12.0.1 - Share file (Android/iOS)path_provider: ^2.1.4 - Direktori sementara (share/export)
Tabel passwords memiliki struktur:
id: INTEGER PRIMARY KEY AUTOINCREMENTtitle: TEXT NOT NULLusername: TEXT NOT NULLpassword: TEXT NOT NULLwebsite: TEXT (nullable)notes: TEXT (nullable)created_at: TEXT NOT NULLupdated_at: TEXT NOT NULL
- Pastikan dependencies terinstall:
flutter pub get
- Jika target Web (Chrome), lakukan setup worker database sekali:
Ini menyalin
dart run sqflite_common_ffi_web:setup
sqflite_sw.jsdansqlite3.wasmke folderweb/.
- Pastikan Android SDK siap (
flutter doctor -v). SetANDROID_SDK_ROOT/ANDROID_HOMEbila diperlukan. - Build release:
flutter build apk --release
- Hasil APK:
build/app/outputs/flutter-apk/app-release.apk
- Catatan:
- Untuk rilis ke Play Store, lakukan penandatanganan (keystore +
key.properties). Dokumentasi:flutter.dev→ “Signing the app”.
- Untuk rilis ke Play Store, lakukan penandatanganan (keystore +
- Pastikan setup web sudah dilakukan:
flutter pub get dart run sqflite_common_ffi_web:setup
- Build release:
flutter build web --release
- Hasil build ada di:
build/web/
- Deploy ke static hosting apa pun (Nginx, Apache, GitHub Pages, Netlify, Vercel, dll.) dengan mengunggah isi folder
build/web/. - Contoh serve lokal cepat:
cd build/web python3 -m http.server 5000 # buka http://localhost:5000
- Catatan penting Web:
- Data tersimpan di IndexedDB (melalui
sqflite_common_ffi_web) dan terikat ke origin (domain+port). Gunakan domain/port tetap agar data tidak “hilang”. - Saat development, jalankan dengan port tetap:
flutter run -d chrome --web-port 5000 --web-hostname localhost
- Setelah setup
sqflite_common_ffi_web, pastikan filesqflite_sw.jsdansqlite3.wasmtersedia di folderweb/.
- Data tersimpan di IndexedDB (melalui



