تكرار السؤال: …
الإجابة المختصرة
Preferences DataStore يخزن أزواج مفتاح-قيمة بدون Schema محددة مسبقًا؛ بينما Proto DataStore يخزن كائنات مخصصة بأنواع بيانات صارمة وآمنة باستخدام Protocol Buffers.
الشرح
في Preferences DataStore لا يوجد ضمان لسلامة نوع البيانات المرجوعة لكل مفتاح، وقد تقع أخطاء وقت التشغيل عند تغيير النوع. في المقابل، يحدد Proto DataStore هيكل البيانات بدقة في ملف .proto، ويقوم المترجم بتوليد كلاسات مهيكلة وصغيرة الحجم وسريعة جدًا في فك التشفير، مما يجعله الخيار الأمثل للإعدادات المعقدة والحساسة للأنواع.
مثال بالكود
// 1. ملف user_prefs.proto:
// message UserPreferences {
// bool show_completed = 1;
// }
// 2. القراءة في Kotlin بنوع صارم تمامًا:
val showCompletedFlow: Flow<Boolean> = context.userPreferencesStore.data
.map { preferences -> preferences.showCompleted }أخطاء شائعة
- استخدام Proto DataStore للإعدادات البسيطة جدًا المكونة من مفتاحين أو ثلاثة، حيث يضيف Protocol Buffers عبء إعداد وبناء غير ضروري.