Kalıcı saklama
- Flutter kursu
- Orta seviye
- Ders 84/99
- 4 dk
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
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
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
final s = jsonEncode(notlar.map((n) => n.toJson()).toList());
await prefs.____('notlar', s);
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 |