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
- Kevin D Moore. SharedPreferences. https://www.raywenderlich.com/books/flutter-apprentice/v2.0/chapters/9-shared-preferences, diakses 5 November 2021
- Rawat, A. Using SharedPreferences in Flutter. https://medium.flutterdevs.com/using-sharedpreferences-in-flutter-251755f07127, diakses 5 November 2021
- Darmawan, E. FLUTTER 41. Shared Preferences & Double Question Mark Operator (??). https://www.youtube.com/watch?v=U9Mg-Ce1yv0, diakses 5 November 2021
Terima Kasih
SharedPreferences
By Muhamad Ishlah
SharedPreferences
- 1,535