Learn
← Previous Next →

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