SharedPreferences

Pemrograman Mobile

 

 

Muhamad Saad Nurul Ishlah, M.Comp.

Dept. Sistem Informasi & Dept. Ilmu Komputer, Universitas Pakuan

Agenda Kuliah

  • Penyimpanan Data
  • SharedPreferences
  • Implementasi SharedPreferences

Penyimpanan Data

Cara Menyimpan Data

Empat cara menyimpan data

  • Tulis data dalam bentuk file, seperti JSON, .txt, dsb.
    • Sederhana, tapi harus dihandel dengan urutan dan format yang benar
  • Gunakan library/plugin untuk menulis data sederhana ke lokasi bersama.
    • iOS atau Android
    • Pasangan kunci-nilai (key-value pair) - SharedPrefences
  • Gunakan database SQLite.
    • Data kompleks
    • Database lokal
  • Mengakses data via Internet

SharedPreferences

SharedPreferences

  • Penyimpanan data sederhana/kecil. Implementasi mudah

  • Bentuk penyimpanan berupa pasangan key-value

    • Android: SharedPreferences

    • iOS/macOS: NSUserDefaults

    • Web: localStorage

    • Windows: AppData

    • Linux: XDG_DATA_HOME

  • Fungsi penggunaan:

    • Data settings, Bookmarks, dll

SharedPreferences

  • Kekurangan

    • Data hilang ketika aplikasi dihapus

    • Bukan bawaan dari Flutter – library/plugin shared_preferences

SharedPreferences

  • Tipe data yang didukung

    • int,

    • String,

    • double

    • bool

    • List<String>

Implementasi SharedPreferences

  • Tambah dependency pada pubspec.yaml

  • Import package shared_preferences pada kode

  • Gunakan pada kode

    • Menyimpan data

    • Mengembalikan data

    • Menghapus data

       

Langkah 1. Tambah Dependency

dependencies:
  flutter:
    sdk: flutter
  shared_preferences: "<versi terbaru>"

Tambahkah dependency shared_preferences di pubspec.yaml

Langkah 2. Import

import 'package:shared_preferences/shared_preferences.dart';

Import paket shared_preferences 

Langkah 3. Gunakan di Kode

addStringToSP() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.setString('stringValue', "abc");
}

Buat instans dari kelas SharedPreferences untuk menggunakan SharedPreferences

Langkah 3. Gunakan di Kode (Menyimpan)

// Menyimpan nilai String
addStringToSP() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.setString('stringValue', "abc");
}

// Menyimpan nilai Integer
addIntToSP() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.setInt('stringValue', 110);
}

// Menyimpan nilai Double
addDoubleToSP() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.setDouble('doubleValue', 115.0);
}

// Menyimpan nilai Boolean
addBoolToSP() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.setBool('boolValue', true);
}

// Menyimpan nilai List dari String
addBoolToSP() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.setStringList('items', <String>['Earth', 'Moon', 'Sun']);
}

Untuk menyimpan Data

  • Gunakan fungsi async  
  • Gunakan metode setter yang menerima 2 parameter: key dan value
  • value dapat bertipe int, String, double atau bool

Langkah 3. Gunakan di Kode (Membaca)

Future<String> getStringValuesSF() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  //Return String
  String stringValue = prefs.getString('stringValue');
  return stringValue;
}


Future<bool> getBoolValuesSF() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  //Return bool
  bool boolValue = prefs.getBool('boolValue');
  return boolValue;
}


Future<int> getIntValuesSF() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  //Return int
  int intValue = prefs.getInt('intValue');
  return intValue;
}


Future<double> getDoubleValuesSF() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  //Return double
  double doubleValue = prefs.getDouble('doubleValue');
  return doubleValue;
}


Future<List<String>> getListOfString() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  // Try reading data from the 'items' key. If it doesn't exist, returns null.
  final List<String>? items = prefs.getStringList('items');
  return items;
}

// Jika nilai tidak terdapat di pref, bisa tambahkan nilai default
int intValue= await prefs.getInt('intValue') ?? 0;

Untuk membaca Data

  • Gunakan fungsi async  
  • Gunakan metode getter dengan parameter key saja
  • value dapat bertipe int, String, double atau bool
  • Jika nilai tidak terdapat di di dalam preferences, gunakan nilai default dengan menambahkan operator ??

Langkah 3. Gunakan di Kode (Menghapus)

removeValues() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  //Remove String
  prefs.remove("stringValue");
  //Remove bool
  prefs.remove("boolValue");
  //Remove int
  prefs.remove("intValue");
  //Remove double
  prefs.remove("doubleValue");
}

Untuk menghapus Data

  • Gunakan metode remove dengan menyediakan parameter key yang akan dihapus

Cek keberadaan nilai

SharedPreferences prefs = await SharedPreferences.getInstance();

bool CheckValue = prefs.containsKey('value');
  • Cek apakah ada sebuah nilai dengan key tertentu
  • metode .containsKey akan mengebalikan nilai boolean

Contoh Implementasi

Counter App SharedPreferences

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // This widget is the root of the application.
  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Shared preferences demo',
      home: MyHomePage(title: 'Shared preferences demo'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  @override
  void initState() {
    super.initState();
    _loadCounter();
  }

  //Loading counter value on start
  Future<void> _loadCounter() async {
    final prefs = await SharedPreferences.getInstance();
    setState(() {
      _counter = (prefs.getInt('counter') ?? 0);
    });
  }

  //Incrementing counter after click
  Future<void> _incrementCounter() async {
    final prefs = await SharedPreferences.getInstance();
    setState(() {
      _counter = (prefs.getInt('counter') ?? 0) + 1;
      prefs.setInt('counter', _counter);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            const Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}

Diskusi

Ada pertanyaan?

Referensi

Terima Kasih

SharedPreferences

By Muhamad Ishlah

SharedPreferences

  • 1,535