غالبًا ما تحتاج التطبيقات إلى تخزين البيانات محليًا على الجهاز — تفضيلات المستخدم، البيانات المخزنة مؤقتًا، المحتوى غير المتصل. يوفر Flutter عدة خيارات — shared_preferences (مفتاح-قيمة)، SQLite (علائقي)، وغيرها — كل منها مناسب لاحتياجات مختلفة.
خيارات التخزين المحلي
SHARED_PREFERENCES → simple KEY-VALUE storage (settings, flags, small data):
→ store primitives (strings, ints, bools) — like a simple persistent map
→ for: user preferences, tokens, simple flags (NOT large/structured data)
SQLITE (sqflite) → a full relational DATABASE on the device:
→ tables, SQL queries — for STRUCTURED, larger data; complex queries; relationships
HIVE / ISAR → fast NoSQL local databases (key-value/object stores) — popular, fast,
Dart-native (no SQL); good for structured local data
FILE storage → read/write files directly (path_provider for directories)
SECURE storage → flutter_secure_storage for SENSITIVE data (tokens, credentials) —
encrypted (keychain/keystore)
مثال shared_preferences
final prefs = await SharedPreferences.getInstance();
await prefs.setString('username', 'Ann'); // store
final name = prefs.getString('username'); // retrieve
await prefs.setBool('darkMode', true);
اختيار الخيار المناسب
Simple settings/flags → shared_preferences (easy key-value)
Structured/large data, queries → SQLite (sqflite) or Hive/Isar
Sensitive data (tokens, passwords) → flutter_secure_storage (ENCRYPTED — don't put
secrets in shared_preferences, which is NOT secure)
Files → file storage (path_provider)
→ Match the storage to the data's size, structure, and sensitivity.
لماذا هذا مهم
فهم كيفية الاحتفاظ بالبيانات محليًا قيم لأن التطبيقات تحتاج عادةً إلى تخزين البيانات على الجهاز — تفضيلات المستخدم، البيانات المخزنة مؤقتًا، المحتوى غير المتصل، رموز المصادقة — لذا فهي معرفة عملية مفيدة لبناء تطبيقات حقيقية.
الاحتفاظ المحلي بالبيانات احتياج شبه عالمي (تذكر الإعدادات، التخزين المؤقت للاستخدام غير المتصل، تخزين بيانات الجلسة)، ويوفر Flutter عدة خيارات مناسبة لاحتياجات مختلفة.
فهم الخيارات — shared_preferences (تخزين بسيط للمفاتيح والقيم للإعدادات والعلامات والبيانات الصغيرة)، SQLite/sqflite (قاعدة بيانات علائقية كاملة للبيانات المنظمة والكبيرة مع الاستعلامات والعلاقات)، Hive/Isar (قواعد بيانات NoSQL سريعة أصلية بلغة Dart تحظى بشعبية للبيانات المحلية المنظمة)، تخزين الملفات، والتخزين الآمن (flutter_secure_storage للبيانات الحساسة) — ومتى تستخدم كلًا منها هي المعرفة الأساسية.
اختيار الخيار المناسب مهم: shared_preferences للإعدادات البسيطة، SQLite أو Hive/Isar للبيانات المنظمة/الكبيرة، تخزين الملفات للملفات، والتخزين الآمن بشكل حاسم للبيانات الحساسة مثل الرموز والبيانات المعتمدة (التي يجب تشفيرها عبر مفاتيح النظام الأساسي/المتجر — نقطة أمان مهمة، لأن shared_preferences ليس آمنًا ولا يجب أن يحتفظ بالأسرار، وهي غلطة شائعة).
مطابقة التخزين لحجم البيانات وهيكلها وحساسيتها تعكس قرارات سليمة وتتجنب المشاكل (مثل استخدام الأداة الخاطئة للعمل أو تخزين البيانات المعتمدة بشكل غير آمن).
بما أن التطبيقات تحتاج عادةً إلى احتفاظ محلي بالبيانات (الإعدادات، التخزين المؤقت، البيانات غير المتصلة، الرموز) ويوفر Flutter عدة خيارات لاحتياجات مختلفة، وبما أن فهمها واختيار الخيار المناسب (خاصة استخدام التخزين الآمن للبيانات الحساسة) مفيد لبناء التطبيقات بشكل صحيح، فإن فهم الاحتفاظ بالبيانات المحلية في Flutter معرفة قيمة وعملية الصلة — احتياج شائع في التطبيقات الحقيقية، مهم لكل من الوظيفة (تخزين البيانات الصحيحة بالطريقة الصحيحة) والأمان (حماية البيانات الحساسة بالتخزين الآمن)، ومهارة مفيدة لبناء تطبيقات تتذكر الحالة وتعمل بدون اتصال.
