CodeBlanks Logo Icon CodeBlanks

Kalıcı saklama

shared_preferences ile notları kalıcı yaparsın.

shared_preferences ile saklama

Notları kalıcı yapmak için shared_preferences paketini kullanırsın. Notların listesini önce jsonEncode ile JSON dizesine çevirir, sonra prefs.setString('notlar', s) ile saklarsın. Uygulama açıldığında prefs.getString('notlar') ile bu dizeyi okur, jsonDecode ile çözüp Note.fromJson ile listeye çevirirsin.

final prefs = await SharedPreferences.getInstance();
final s = jsonEncode(notlar.map((n) => n.toJson()).toList());
await prefs.setString('notlar', s);

Okuma ve çözme

Kayıtlı dizeyi okurken prefs.getString('notlar') sonucunu kontrol edersin. Dize varsa jsonDecode ile List'e çevirir, her elemanı Note.fromJson ile modele dönüştürürsün. Dize yoksa boş liste ile başlarsın.

final s = prefs.getString('notlar');
if (s == null) return [];
final liste = jsonDecode(s) as List;
return liste.map((e) => Note.fromJson(e as Map<String, dynamic>)).toList();

Uygulama notlariKaydet fonksiyonu

notlariKaydet adında async bir fonksiyon yaz. SharedPreferences.getInstance() ile prefs al, notlar listesini jsonEncode ile dizeleştir (notlar.map((n) => n.toJson()).toList()), sonra prefs.setString('notlar', s) ile kaydet. main içinde 'hazir' yazdır.

Başlangıç kodu

main.dart
import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';

class Note {
  final String id;
  final String baslik;
  final String icerik;
  Note(this.id, this.baslik, this.icerik);
  Map<String, dynamic> toJson() => {'id': id, 'baslik': baslik, 'icerik': icerik};
}

// notlariKaydet fonksiyonunu yaz
// prefs örneğini al
// notlar listesini dizeleştir
// 'notlar' anahtarıyla kalıcı olarak kaydet

void main() {
  // 'hazir' yazdır
}

Örnek çözüm

main.dart
import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';

class Note {
  final String id;
  final String baslik;
  final String icerik;
  Note(this.id, this.baslik, this.icerik);
  Map<String, dynamic> toJson() => {'id': id, 'baslik': baslik, 'icerik': icerik};
}

Future<void> notlariKaydet(List<Note> notlar) async {
  final prefs = await SharedPreferences.getInstance();
  final s = jsonEncode(notlar.map((n) => n.toJson()).toList());
  await prefs.setString('notlar', s);
}

void main() {
  print('hazir');
}

Beklenen çıktı

hazir

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Not listesini shared_preferences'a kaydetmeden önce ne yapılır?

  • Listeyi jsonEncode ile JSON dizesine çevirmek Doğru cevap
  • Listeyi bir Future'a sarmak
  • Listeyi bir Widget'a çevirmek
  • Listeyi sqflite tablosuna yazmak

Açıklama: shared_preferences yalnızca temel türleri saklar; bu yüzden not listesini önce jsonEncode ile dizeleştirirsin. Future sarmak, Widget'a çevirmek ve sqflite kaydetmek farklı işlemlerdir ve burada gerekli değildir.

2 String olarak sakla

Soru
final s = jsonEncode(notlar.map((n) => n.toJson()).toList());
await prefs.____('notlar', s);
Cevap
final s = jsonEncode(notlar.map((n) => n.toJson()).toList());
await prefs.setString('notlar', s);

Açıklama: shared_preferences'ta bir dize saklamak için setString kullanılır. getString okuma içindir, setInt sayı içindir, setList diye bir metod yoktur.

3 Kalıcı saklama parçaları

Kavram Anlamı
shared_preferences kalıcı saklama
jsonEncode listeyi dizeleştirme
setString dize yazma
jsonDecode dizeyi çözme

Orta seviye bölümündeki tüm dersler