Pendahuluan
Aplikasi mobile sering dihadapkan pada koneksi tidak stabil. Pengguna berharap data tetap dapat diakses meski offline. Di Flutter, paket Hive menyediakan basis data NoSQL ringan, cepat, dan sepenuhnya offline‑first.
Kenapa Hive?
- Performansi: Baca/tulis dalam milidetik, tanpa JNI.
- Ringkas: Tidak butuh SQLite schema, cukup tipe primitive atau model yang di‑serialize.
- Cross‑platform: Web, Android, iOS, macOS.
- Enkripsi: Opsional, cocok untuk data sensitif.
Instalasi
flutter pub add hive hive_flutter
flutter pub add build_runner hive_generator --dev
hive_fluttermeng‑inisialisasi Hive pada direktori aplikasi.
Buat Model
Gunakan type adapters agar Hive mengerti objek Dart.
import 'package:hive/hive.dart';
part 'note.g.dart';
@HiveType(typeId: 0)
class Note extends HiveObject {
@HiveField(0)
String title;
@HiveField(1)
String content;
@HiveField(2)
DateTime createdAt;
Note({required this.title, required this.content, DateTime? createdAt})
: this.createdAt = createdAt ?? DateTime.now();
}
Jalankan generator:
flutter packages pub run build_runner build --delete-conflicting-outputs
File note.g.dart otomatis dibuat.
Inisialisasi Hive
import 'package:hive_flutter/hive_flutter.dart';
import 'note.dart';
Future<void> main() async {
await Hive.initFlutter();
Hive.registerAdapter(NoteAdapter());
await Hive.openBox<Note>('notes');
runApp(MyApp());
}
Box notes akan menyimpan semua catatan.
CRUD Praktis
final box = Hive.box<Note>('notes');
// CREATE
await box.add(Note(title: 'Halo', content: 'Ini contoh note'));
// READ ALL
final allNotes = box.values.toList();
// UPDATE (index based)
final note = box.getAt(0);
note?.title = 'Ubah Judul';
await note?.save();
// DELETE
await box.deleteAt(0);
Semua operasi lokal, tidak memerlukan jaringan.
Sinkronisasi dengan Server (Opsional)
Saat koneksi tersedia, kumpulkan perubahan dengan flag isSynced. Kirim ke API, lalu set flag true. Contoh sederhana:
Future<void> syncNotes() async {
final unsynced = box.values.where((n) => !(n as dynamic).isSynced);
for (var note in unsynced) {
await upload(note);
(note as dynamic).isSynced = true;
await note.save();
}
}
Anda dapat memanggil syncNotes pada ConnectivityResult.mobile atau wifi.
Enkripsi (Jika Data Sensitif)
await Hive.initFlutter('path/to/app');
await Hive.openBox<Note>('secureNotes', encryptionCipher: HiveAesCipher(utf8.encode('my‑secret‑key')));
Kunci harus 32‑byte untuk AES‑256.
Penutup
Dengan Hive, aplikasi Anda tetap responsif meski jaringan terputus. Simpan data penting secara lokal, sinkronkan ketika jaringan kembali. Eksperimen dengan lazy boxes, watchers, dan binary adapters untuk performa maksimum.
Coba sendiri! Share ke sosial media dan tag @ahsai001