0Pricing
Android Academy · درس

قراءة الإعدادات وكتابتها

احفظ تفضيلات المستخدم وراقبها

قراءة الإعدادات وكتابتها درس مجاني في Android Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Android Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Android Academy 4 دروس في المجموع.

القراءة والكتابة

بعد تعريف المفاتيح، تتمثل العمليتان الأساسيتان في قراءة تدفق البيانات والكتابة باستخدام edit. عمليات القراءة تفاعلية، أما الكتابة فهي دوال suspend.

تدفق البيانات

إن dataStore.data عبارة عن Flow<Preferences>. وفي كل مرة تكتب فيها، يُصدر التدفق لقطة جديدة من Preferences، ولذلك يظل الجامعون محدّثين تلقائيًا.

val rawData: Flow<Preferences> = dataStore.data

تحويل قيمة واحدة

نادرًا ما تحتاج إلى كائن Preferences بأكمله. استخدم map لاستخراج مفتاح واحد وتطبيق قيمة افتراضية.

val darkMode: Flow<Boolean> = dataStore.data
    .map { prefs -> prefs[PrefKeys.DARK_MODE] ?: false }

معالجة أخطاء القراءة

قد تفشل قراءات القرص مع IOException. استخدم catch قبل map لإصدار تفضيلات فارغة والحفاظ على استمرار التدفق.

val darkMode: Flow<Boolean> = dataStore.data
    .catch { e ->
        if (e is IOException) emit(emptyPreferences())
        else throw e
    }
    .map { it[PrefKeys.DARK_MODE] ?: false }

الكتابة باستخدام edit

لتغيير القيم، استدعِ دالة suspend‏ edit. داخل lambda، تحصل على كائن تفضيلات قابل للتعديل؛ اضبط المفاتيح عليه. وتُعد الكتلة بأكملها معاملة واحدة.

suspend fun setDarkMode(enabled: Boolean) {
    dataStore.edit { prefs ->
        prefs[PrefKeys.DARK_MODE] = enabled
    }
}

‏edit دالة Suspend

لأن edit دالة suspend، يجب استدعاؤها من coroutine، وعادةً داخل ViewModel باستخدام viewModelScope.launch. وهذا يضمن تنفيذ الكتابة خارج الخيط الرئيسي.

fun toggleDarkMode(value: Boolean) {
    viewModelScope.launch {
        repository.setDarkMode(value)
    }
}

تحديث عدة مفاتيح

يمكن لكتلة edit واحدة ضبط عدة مفاتيح. وتُثبّت هذه التغييرات معًا بشكل ذري، لذلك لا يرى المراقبون تحديثًا جزئيًا مطلقًا.

dataStore.edit { prefs ->
    prefs[PrefKeys.USERNAME] = "ada"
    prefs[PrefKeys.DARK_MODE] = true
    prefs[PrefKeys.FONT_SIZE] = 16
}

زيادة قيمة

يمكنك داخل edit قراءة القيمة الحالية وحساب قيمة جديدة، وهو أمر مفيد للعدادات مثل عدد مرات التشغيل.

suspend fun incrementLaunchCount() {
    dataStore.edit { prefs ->
        val current = prefs[PrefKeys.LAUNCH_COUNT] ?: 0
        prefs[PrefKeys.LAUNCH_COUNT] = current + 1
    }
}

الإزالة والمسح

أزل مفتاحًا واحدًا باستخدام remove، أو امسح المخزن بالكامل باستخدام clear، وذلك في كلتا الحالتين داخل كتلة edit.

dataStore.edit { prefs ->
    prefs.remove(PrefKeys.USERNAME)
}

dataStore.edit { prefs ->
    prefs.clear()
}

الجمع في Compose

في Composable، حوّل تدفق ViewModel إلى حالة باستخدام collectAsStateWithLifecycle(). وتُعاد composition لواجهة المستخدم كلما تغيّر الإعداد.

val darkMode by viewModel.darkMode.collectAsStateWithLifecycle(initial = false)

Switch(
    checked = darkMode,
    onCheckedChange = { viewModel.toggleDarkMode(it) }
)

دورة القراءة والتعديل والكتابة

عند جمع الأجزاء معًا: تقرأ واجهة المستخدم عبر تدفق، ويبدّل المستخدم الإعداد، ثم يطلق ViewModel‏ coroutine تستدعي edit، ويكتب DataStore البيانات، ويُصدر التدفق قيمة جديدة، وتُعاد composition لواجهة المستخدم. وهكذا تحصل على تفاعل كامل من البداية إلى النهاية.

اختبار سريع

اختبر مدى فهمك للقراءة والكتابة.

مراجعة

يمكنك الآن قراءة الإعدادات وكتابتها:

  • dataStore.data هو Flow<Preferences> تفاعلي
  • يستخرج map قيمة واحدة، بينما يتعامل catch مع أخطاء الإدخال والإخراج
  • تكتب dataStore.edit { } البيانات ذريًا من داخل coroutine
  • يقود collectAsStateWithLifecycle واجهة Compose

بعد ذلك: البيانات المنظمة محددة النوع باستخدام Proto DataStore.

الأسئلة الشائعة

هل درس «قراءة الإعدادات وكتابتها» مجاني؟

نعم — نص درس «قراءة الإعدادات وكتابتها» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Android Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Android Academy 4 دروس في المجموع.

ماذا ستتعلم في «قراءة الإعدادات وكتابتها»؟

احفظ تفضيلات المستخدم وراقبها تتمرن على Android Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Android Academy؟

لا تُشترط خبرة سابقة. Android Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «قراءة الإعدادات وكتابتها»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Android Academy هذا؟

نعم. كل درس في Android Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. DataStore مقابل SharedPreferences
  2. Preferences DataStore
  3. قراءة الإعدادات وكتابتها
  4. Proto DataStore
← العودة إلى Android Academy