Membuat Fitur Favorit Offline Menggunakan Database SQLite di Flutter
Bayangkan situasi di mana kalian lagi di dalam kereta bawah tanah atau di tempat yang susah sinyal, lalu kalian ingin mengecek daftar film…
Membuat Fitur Favorit Offline Menggunakan Database SQLite di Flutter

Bayangkan situasi di mana kalian lagi di dalam kereta bawah tanah atau di tempat yang susah sinyal, lalu kalian ingin mengecek daftar film yang sudah kalian simpan untuk ditonton nanti saat weekend. Kalau aplikasi kita selalu bergantung pada koneksi internet untuk memuat halaman favorit tersebut, yang ada tampilannya cuma bakal berputar-putar saja tanpa memunculkan data. Tentu ini bisa bikin pengguna kecewa.
Untuk mengatasi masalah ini, kita membutuhkan ruang penyimpanan lokal di dalam perangkat agar data film favorit kita tetap aman dan bisa diakses kapan saja walaupun tanpa internet. Pilihan terbaik untuk urusan ini adalah menggunakan database SQLite. Mari kita pelajari cara penerapannya tanpa membuat performa aplikasi menjadi berat.
1. Mengamankan Koneksi Database dengan Pola Singleton Salah satu kesalahan yang sering dilakukan saat pertama kali bermain dengan database lokal adalah membuka dan menutup koneksi database secara berulang-ulang setiap kali mau mengambil data. Hal ini bisa memicu kebocoran memori (memory leak).
Untuk mencegah hal itu, kita bisa menerapkan pola Singleton. Intinya, kita membuat sebuah mekanisme yang memastikan bahwa hanya ada satu jalur koneksi database yang aktif selama aplikasi dijalankan.
class DatabaseHelper {
// Membuat instance tunggal (Singleton)
static final DatabaseHelper instance = DatabaseHelper._init();
static Database? _database;
DatabaseHelper._init();
Future<Database> get database async {
// Kalau database sudah terbuka, langsung pakai yang ada
if (_database != null) return _database!;
// Kalau belum, baru kita inisialisasi database baru
_database = await _initDB("movies.db");
return _database!;
}
}
2. Menghindari Konflik Data Saat Menambah Favorit Ada kalanya pengguna tidak sengaja menekan tombol ikon hati (favorit) secara berulang-ulang pada film yang sama karena layarnya sedikit delay. Jika kita tidak mengaturnya di bagian database, hal ini bisa memicu error Primary Key Conflict karena sistem mencoba memasukkan ID film yang sama secara berulang kali.
Di SQLite, kita bisa menyelesaikan masalah ini dengan sangat mudah menggunakan parameter conflictAlgorithm pada fungsi insert.
Future<int> insertFavorite(ModelMovie movie) async {
final db = await instance.database;
return await db.insert(
"favorites",
movie.toMap(),
// Jika data dengan ID yang sama sudah ada, timpa saja dengan yang baru
conflictAlgorithm: ConflictAlgorithm.replace,
);
}
(Sangat simpel kan? Cukup dengan satu baris tambahan, aplikasi kita sudah bebas dari drama crash akibat konflik data data ganda).
메타데이터
- post_id
- fa7300e4fdee
- slug
- membuat-fitur-favorit-offline-menggunakan-database-sqlite-di-flutter-fa7300e4fdee
- url
- https://medium.com/@rifaldiricky27/membuat-fitur-favorit-offline-menggunakan-database-sqlite-di-flutter-fa7300e4fdee
- canonical_url
- https://medium.com/@rifaldiricky27/membuat-fitur-favorit-offline-menggunakan-database-sqlite-di-flutter-fa7300e4fdee
- author_url
- https://medium.com/@rifaldiricky27
- status
- ok
- fetched_at
- 2026-06-15 20:49:13