shared_preferences की सुरक्षा और आयतन सीमाओं को जानते हुए इसके साथ प्राथमिकताओं और हल्के डेटा को परसिस्ट करें।
इस पाठ को Kodokon में खोलेंshared_preferences एक की/वैल्यू स्टोर है जो नेटिव तंत्रों (Android पर SharedPreferences, iOS पर UserDefaults) द्वारा समर्थित है। इसका सबसे उपयुक्त स्थान: छोटा डेटा - चुनी गई थीम, देखा गया ऑनबोर्डिंग, अंतिम सक्रिय टैब। इससे आगे, उपकरण बदलें: बड़े या क्वेरी-योग्य डेटा के लिए sqflite या drift डेटाबेस, किसी भी संवेदनशील चीज़ के लिए flutter_secure_storage। फ़ाइल पूरी तरह मेमोरी में लोड की जाती है: यह न तो एन्क्रिप्टेड है और न ही बढ़ने के लिए बनाई गई है।
flutter pub add shared_preferencesgetInstance() पहली कॉल पर एसिंक्रोनस होता है (फ़ाइल पढ़ना), फिर एक कैश किया गया इंस्टेंस लौटाता है: उसके बाद की get* कॉल सिंक्रोनस होती हैं, मेमोरी से परोसी जाती हैं। दूसरी ओर, set* कॉल डिस्क पर एसिंक्रोनस रूप से लिखती हैं। व्यवहार में, की स्ट्रिंग को पूरे एप्लिकेशन में बिखेरें नहीं: उन्हें एक टाइप किए गए, इंजेक्ट करने योग्य, परीक्षण योग्य रैपर में केंद्रीकृत करें।
import 'package:shared_preferences/shared_preferences.dart';
class SettingsStore {
SettingsStore(this._prefs);
static const _darkModeKey = 'settings.darkMode';
final SharedPreferences _prefs;
static Future<SettingsStore> load() async {
final prefs = await SharedPreferences.getInstance();
return SettingsStore(prefs);
}
bool get darkMode =>
_prefs.getBool(_darkModeKey) ?? false;
Future<void> setDarkMode(bool value) =>
_prefs.setBool(_darkModeKey, value);
}यह API केवल प्रिमिटिव टाइप संग्रहीत करता है: bool, int, double, String, और List<String>। किसी संरचित ऑब्जेक्ट के लिए, इसे JSON में सीरियलाइज़ करें - पहले पाठ के आपके toJson/fromJson यहाँ फिर से काम आते हैं। एक स्वीकृत समझौता: हर सेव पूरी वैल्यू को फिर से लिखता है और कोई क्वेरी संभव नहीं है। किसी ड्राफ़्ट के लिए एकदम सही, किसी इतिहास के लिए अनुपयुक्त।
import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';
class Draft {
const Draft({required this.title, required this.body});
factory Draft.fromJson(Map<String, dynamic> json) =>
Draft(
title: json['title'] as String,
body: json['body'] as String,
);
final String title;
final String body;
Map<String, dynamic> toJson() =>
{'title': title, 'body': body};
}
Future<void> saveDraft(Draft draft) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setString('draft', jsonEncode(draft));
}
Future<Draft?> loadDraft() async {
final prefs = await SharedPreferences.getInstance();
final raw = prefs.getString('draft');
if (raw == null) return null;
return Draft.fromJson(
jsonDecode(raw) as Map<String, dynamic>,
);
}shared_preferences में रखा जाना चाहिए?getInstance() के बाद, get* पठन कैसा व्यवहार करते हैं?Future लौटाते हैं जिनकी आपको हर बार प्रतीक्षा करनी पड़ती है।Draft ऑब्जेक्ट को कैसे सेव करते हैं?jsonEncode के साथ JSON में सीरियलाइज़ करें और setString के ज़रिए संग्रहीत करें।prefs.setObject('draft', draft) का उपयोग करें।setStringList में बाँट दें।