Menggunakan Shared Preferences di Flutter: Penyimpanan Data Sederhana dan Efisien
Dalam pengembangan aplikasi Flutter, seringkali kita membutuhkan cara untuk menyimpan data dalam jumlah kecil yang persisten, seperti preferensi pengguna, status aplikasi terakhir, atau token sederhana. Untuk kebutuhan ini, Shared Preferences hadir sebagai solusi yang ringan dan mudah digunakan.
Apa itu Shared Preferences?
Shared Preferences adalah mekanisme penyimpanan key-value sederhana yang memungkinkan Anda menyimpan data primitif
(string, int, double, bool, List<String>) secara lokal di perangkat pengguna. Data ini akan tetap ada bahkan
setelah aplikasi ditutup dan dibuka kembali. Di balik layar, ia menggunakan mekanisme penyimpanan asli platform,
seperti NSUserDefaults di iOS/macOS dan SharedPreferences di Android, sehingga sangat
terintegrasi dan efisien.
Mengapa Menggunakan Shared Preferences?
- Penyimpanan Preferensi Pengguna: Tema gelap/terang, bahasa pilihan, ukuran font.
- Status Aplikasi: Menyimpan apakah pengguna sudah login, atau halaman terakhir yang dilihat.
- Data Kecil dan Sederhana: Token API, skor game tertinggi.
- Pengaturan Cepat: Mengingat pengaturan yang sering diubah oleh pengguna.
Memulai dengan Shared Preferences
Langkah pertama adalah menambahkan paket shared_preferences ke proyek Flutter Anda. Buka file
pubspec.yaml dan tambahkan dependensi berikut:
dependencies:
flutter:
sdk: flutter
shared_preferences: ^2.2.
Setelah itu, jalankan flutter pub get di terminal proyek Anda untuk mengunduh paket.
Operasi Dasar Shared Preferences
Berikut adalah langkah-langkah dasar untuk menggunakan Shared Preferences:
1. Inisialisasi
Sebelum bisa menggunakan Shared Preferences, Anda perlu mendapatkan instance-nya. Karena ini adalah operasi asinkron, biasanya dilakukan di awal aplikasi atau sebelum operasi baca/tulis pertama.
final prefs = await SharedPreferences.getInstance();
2. Menyimpan Data
Anda dapat menyimpan berbagai tipe data primitif menggunakan metode set yang sesuai:
setString(key, value)setInt(key, value)setBool(key, value)setDouble(key, value)setStringList(key, value)
Contoh:
await prefs.setString('username', 'JohnDoe');await prefs.setBool('isDarkMode', true);
3. Membaca Data
Untuk membaca data, gunakan metode get yang sesuai dengan tipe data yang disimpan. Jika kunci tidak
ditemukan, metode ini akan mengembalikan null.
getString(key)getInt(key)getBool(key)getDouble(key)getStringList(key)
Contoh:
String? username = prefs.getString('username');bool? isDarkMode = prefs.getBool('isDarkMode') ?? false; // Memberikan nilai default
4. Menghapus Data
Anda bisa menghapus data berdasarkan kunci atau menghapus semua data yang disimpan oleh aplikasi.
remove(key): Menghapus data untuk kunci tertentu.clear(): Menghapus semua data yang disimpan oleh aplikasi.
Contoh:
await prefs.remove('username');await prefs.clear();
Contoh Penggunaan Sederhana: Menyimpan Preferensi Tema
Bayangkan Anda ingin pengguna dapat beralih antara tema terang dan gelap, dan preferensi ini harus disimpan.
- Saat pengguna mengubah tema: Simpan nilai boolean ke Shared Preferences.
- Saat aplikasi dibuka: Baca nilai tema dari Shared Preferences.
Future<void> saveThemePreference(bool isDark) async { final prefs = await SharedPreferences.getInstance(); await prefs.setBool('is_dark_theme', isDark);}
Future<bool> loadThemePreference() async { final prefs = await SharedPreferences.getInstance(); return prefs.getBool('is_dark_theme') ?? false; // Default ke terang jika belum ada}
Batasan dan Alternatif
Batasan Shared Preferences:
- Hanya untuk Data Primitif: Tidak cocok untuk objek kompleks atau struktur data yang besar.
- Tidak Aman untuk Data Sensitif: Data disimpan dalam format yang dapat dibaca (plain text di Android, .plist di iOS), jadi hindari menyimpan informasi sensitif seperti kata sandi atau kredensial API tanpa enkripsi tambahan.
- Bukan Database: Bukan pengganti database untuk data terstruktur atau relasional.
Alternatif Lainnya:
- sqflite: Untuk database SQLite lokal yang lebih kompleks dan terstruktur.
- Hive: Database NoSQL yang sangat cepat dan mudah digunakan untuk data terstruktur, mirip dengan Shared Preferences namun lebih kuat.
- sembast: Database NoSQL persisten dengan API seperti
Map. - flutter_secure_storage: Untuk menyimpan data sensitif dengan aman menggunakan Keychain di iOS dan Keystore di Android.
Kesimpulan
Shared Preferences adalah alat yang sangat berguna di Flutter untuk menyimpan data dalam jumlah kecil dan primitif secara persisten. Kemudahannya dalam penggunaan menjadikannya pilihan utama untuk preferensi pengguna dan pengaturan aplikasi. Namun, penting untuk memahami batasan-batasannya dan memilih solusi penyimpanan yang tepat untuk setiap kebutuhan data Anda, terutama untuk data yang lebih kompleks atau sensitif.