Lompat ke konten utama
←

Flutter Dasar: Dart, Widget, dan State

Pelajaran 17 dari 18

Data dari internet dan penyimpanan lokal

Penyimpanan lokal dan penanganan galat

Setelah pelajaran ini kamu bisa memilih data yang cocok disimpan sebagai pasangan kunci dan nilai, membaca kunci yang belum ada dengan nilai bawaan, dan menelusuri try, on, catch, dan finally.

  • ±13 menit
  • 3 latihan
  • Diperiksa 28 Okt 2026

Latihan di pelajaran ini butuh akun gratis. Progres, kode, dan catatanmu hanya tersimpan di browser ini. Masuk untuk menyimpannya

Materi

Data kecil yang perlu diingat antarsesi, seperti pilihan tema atau kode cabang terakhir, bisa disimpan di perangkat sebagai pasangan kunci dan nilai dengan plugin shared_preferences. Setelah SharedPreferences.getInstance(), setter seperti setInt, setBool, dan setString menyimpan nilai, sedangkan getter getInt, getBool, dan getString membacanya. Getter mengembalikan null bila kuncinya belum pernah disimpan, sehingga pola bacanya prefs.getInt('kunjungan') ?? 0. Getter melempar galat bila tipe yang tersimpan berbeda dari yang diminta.

Future<void> simpanCabang(String kode) async {
  final prefs = await SharedPreferences.getInstance();
  await prefs.setString('cabangTerakhir', kode);
}

Future<String> bacaCabang() async {
  final prefs = await SharedPreferences.getInstance();
  return prefs.getString('cabangTerakhir') ?? 'PUSAT';
}

Penyimpanan ini punya batas: hanya tipe primitif (int, double, bool, String, dan List<String>), tidak dirancang untuk data dalam jumlah besar, dan tidak menjamin data bertahan setelah aplikasi dimulai ulang. Data yang lebih besar atau yang tidak boleh hilang membutuhkan basis data.

Galat yang diperkirakan, seperti jaringan putus atau JSON rusak, ditangkap dengan try. on JenisGalat menangkap satu jenis galat, catch (e) mengambil objek galatnya, dan finally selalu berjalan, termasuk saat break keluar dari perulangan. Galat yang lolos saat build menampilkan layar galat merah di mode debug dan latar abu-abu di mode rilis.

Latihan

0/3 lulus

Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 1 dari 3

catatKunjungan() dipanggil sekali setiap aplikasi dibuka. Aplikasi baru dipasang, lalu dibuka tiga kali, dan datanya tersimpan normal. Berapa nilai yang dikembalikan pada pembukaan ketiga?

Future<int> catatKunjungan() async {
  final prefs = await SharedPreferences.getInstance();
  final kunjungan = (prefs.getInt('kunjungan') ?? 0) + 1;
  await prefs.setInt('kunjungan', kunjungan);
  return kunjungan;
}
Pilih satu jawaban

Latihan 2 dari 3

Data mana yang sesuai dengan batasan shared_preferences di dokumentasi Flutter?

Pilih satu jawaban

Latihan 3 dari 3

Apa baris terakhir yang dicetak program ini?

class GagalJaringan implements Exception {
  final String pesan;
  GagalJaringan(this.pesan);
}

Future<String> muat(int percobaan) async {
  if (percobaan < 2) throw GagalJaringan('sinyal lemah');
  if (percobaan == 2) throw const FormatException('JSON rusak');
  return 'OK';
}

Future<void> main() async {
  for (var i = 1; i <= 3; i++) {
    try {
      print(await muat(i));
    } on GagalJaringan catch (e) {
      print('Coba lagi: ${e.pesan}');
    } on FormatException {
      print('Data rusak');
      break;
    } finally {
      print('selesai $i');
    }
  }
}
Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Lanjutkan ke