Hari 23: Local Storage — SharedPreferences
60 min
Last updated 09 Apr 2026
SharedPreferences
Untuk menyimpan data sederhana secara persisten (key-value) di device. Cocok untuk: tema, token login, preferensi user.
// pubspec.yaml: shared_preferences: ^2.2.2
import "package:shared_preferences/shared_preferences.dart";
class PrefsService {
static const _kToken = "auth_token";
static const _kTheme = "is_dark";
static const _kUsername = "username";
static Future simpanToken(String token) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setString(_kToken, token);
}
static Future ambilToken() async {
final prefs = await SharedPreferences.getInstance();
return prefs.getString(_kToken);
}
static Future hapusToken() async {
final prefs = await SharedPreferences.getInstance();
await prefs.remove(_kToken);
}
static Future setTheme(bool isDark) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setBool(_kTheme, isDark);
}
static Future isDarkTheme() async {
final prefs = await SharedPreferences.getInstance();
return prefs.getBool(_kTheme) ?? false;
}
}
// Penggunaan di app:
void main() async {
await PrefsService.simpanToken("eyJhbGc...");
String? token = await PrefsService.ambilToken();
print("Token: $token");
}
Dart Isolate (Background Processing)
import "dart:isolate";
void heavyComputation(SendPort sendPort) {
int result = 0;
for (int i = 0; i < 1000000; i++) result += i;
sendPort.send(result);
}
void main() async {
ReceivePort receivePort = ReceivePort();
await Isolate.spawn(heavyComputation, receivePort.sendPort);
int result = await receivePort.first;
print("Hasil: $result");
}
💡
Notice: Gunakan static methods untuk service yang tidak perlu instance. containsKey untuk cek keberadaan key.
Assignment
Buat UserSession dengan saveLogin, isLoggedIn, getUsername, dan logout menggunakan MockPrefs.
Expected output:
Saved: nama = Budi
Saved: token = token123
Logged in: true
Username: Budi
Logged out.
After logout — Logged in: false
Dart
main.dart
Solution
Output