image

30 Nov 2025

9K

35K

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.
  • Future<void> saveThemePreference(bool isDark) async {
    final prefs = await SharedPreferences.getInstance();
    await prefs.setBool('is_dark_theme', isDark);
    }

  • Saat aplikasi dibuka: Baca nilai tema dari Shared Preferences.
  • 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.

Related Articles

Dec 19, 2025

Flutter & Firebase Auth: Seamless Social Media Login

Flutter & Firebase Auth: Seamless Social Media Login In today's digital landscape, user authentication is a critical component of almost every application. Pro

Dec 19, 2025

Building a Widget List with Sticky

Building a Widget List with Sticky Header in Flutter Creating dynamic and engaging user interfaces is crucial for modern applications. One common UI pattern th

Dec 19, 2025

Mastering Transform Scale & Rotate Animations in Flutter

Mastering Transform Scale & Rotate Animations in Flutter Flutter's powerful animation framework allows developers to create visually stunning and highly intera