شارك المقالة
شرح Day Night Switch في Jetpack Compose (Compose Multiplatform) مع مثال عملي

شرح Day Night Switch في Jetpack Compose (Compose Multiplatform) مع مثال عملي

شرح Day Night Switch في Jetpack Compose مع مثال عملي من GitHub


إذا كنت تعمل على تطبيق باستخدام Jetpack Compose أو حتى Compose Multiplatform، فمن المؤكد أنك تحتاج إلى دعم الوضع الليلي (Dark Mode) والنهاري (Light Mode).

في هذا المقال سنقوم بشرح كود حقيقي من GitHub لملف DayNightSwitch.kt، وكيف يتم تنفيذ زر احترافي للتبديل بين الوضعين بطريقة سلسة وحديثة.

سنفهم الفكرة، طريقة العمل، وأفضل الممارسات المستخدمة داخل الكود.

ما هو Day Night Switch؟

Day Night Switch هو مكون (UI Component) يسمح للمستخدم بالتبديل بين الوضع الفاتح (Light Mode) والوضع الداكن (Dark Mode).

في Jetpack Compose يتم ذلك عادة باستخدام حالة (State) يتم تغييرها عند الضغط على زر التبديل.

عنصر Switch في Compose هو عنصر UI بسيط يسمح بالتبديل بين حالتين (true / false) :contentReference[oaicite:0]{index=0}

فكرة كود DayNightSwitch.kt

الكود الموجود في GitHub يعتمد على مفهوم مهم في Compose وهو:

State Management + Recomposition

عندما تتغير قيمة الحالة (مثل isDarkMode)، يقوم Compose بإعادة رسم الواجهة تلقائيًا (Recomposition).

وهذا هو أساس بناء واجهات تفاعلية في Compose :contentReference[oaicite:1]{index=1}

كيف يعمل الكود؟

الكود يعتمد على 3 عناصر رئيسية:

1. الحالة (State)
يتم تخزين وضع الثيم (فاتح / داكن) داخل متغير باستخدام:

var isDarkMode by remember { mutableStateOf(false) }

هذا المتغير يتحكم في شكل الواجهة بالكامل.

2. عنصر Switch
يتم استخدام Switch للتبديل بين الوضعين:

Switch(
    checked = isDarkMode,
    onCheckedChange = { isDarkMode = it }
)

عند تغيير الحالة، يتم تحديث القيمة مباشرة.

3. إعادة بناء الواجهة (Recomposition)
عند تغيير state، يقوم Compose بإعادة رسم العناصر المتأثرة فقط، وليس كامل الواجهة.

وهذا يجعل الأداء عالي جدًا.

الجزء المميز في الكود (Animation + UI)

كود DayNightSwitch في GitHub لا يستخدم Switch عادي فقط، بل يحتوي على:

– أنيميشن سلسة عند التبديل – تغيير الألوان حسب الحالة – تحريك الأيقونات (شمس / قمر) – تصميم احترافي مخصص

وهذا يجعل التجربة أفضل بكثير من Switch التقليدي.

ربط Switch مع الثيم (Theme)

الفكرة الأساسية هي ربط قيمة isDarkMode مع Theme:

MyAppTheme(
    darkTheme = isDarkMode
) {
    AppContent()
}

عند تغيير القيمة، يتم تطبيق الثيم مباشرة على كامل التطبيق.

في Compose يتم تعريف الألوان لكل وضع داخل Theme.kt :contentReference[oaicite:2]{index=2}

لماذا هذا الأسلوب احترافي؟

فصل المنطق عن الواجهة
الحالة تتحكم في السلوك بدون تعقيد.

تجربة مستخدم ممتازة
بفضل الأنيميشن والتفاعل.

أداء عالي
Compose يعيد رسم العناصر المتغيرة فقط.

قابلية التوسع
يمكنك إضافة حالات أو ثيمات بسهولة.

أفضل استخدامات Day Night Switch

– تطبيقات التواصل – تطبيقات الإنتاجية – التطبيقات التعليمية – أي تطبيق يدعم Dark Mode

عيوب أو تحديات التطبيق

تعقيد إضافي
إذا استخدمت Animation متقدمة قد يزيد التعقيد.

إدارة الحالة
يجب حفظ الحالة (مثلاً باستخدام DataStore) حتى لا تضيع عند إعادة تشغيل التطبيق.

التوافق مع النظام
يجب تحديد هل تعتمد على إعدادات النظام أو المستخدم.

نصائح احترافية عند التطبيق

– استخدم remember و mutableStateOf بشكل صحيح – اربط الحالة مع Theme مباشرة – أضف Animation لتحسين UX – احفظ اختيار المستخدم

الخلاصة

ملف DayNightSwitch.kt يقدم مثالًا عمليًا رائعًا لكيفية بناء مكون احترافي في Jetpack Compose.

يعتمد على مفهوم بسيط:

State → Change → Recomposition → UI Update

ولكن عند تطبيقه بشكل صحيح مع Animation وتصميم جيد، يمكنك بناء تجربة مستخدم قوية جدًا.

إذا كنت تبني تطبيق حديث باستخدام Compose، فإن إضافة Day Night Switch ليس مجرد ميزة إضافية، بل عنصر أساسي لتحسين تجربة المستخدم وجعل التطبيق أكثر احترافية.


لمزيد من المقالات : كيفية تثبيت MySQL و MySQL Workbench على macOS من الموقع الرسمي خطوة بخطوة
شاهد أيضًا
مقالات ذات صلة
تعرف على كيفية عرض كاميرا الجهاز والتعرف على الوجوه ببايثون بواسطة face detection
تعرف على كيفية عرض كاميرا الجهاز والتعرف على الوجوه ببايثون بواسطة face detection

كيفية عرض كاميرا الجهاز والتعامل مع الfaces ببايثون في هذة المقالة سوف نساعدك على كيفية…

عمل scale للعناصر عند تمرير الماوس عليه في صفحات ويب فلاتر
عمل scale للعناصر عند تمرير الماوس عليه في صفحات ويب فلاتر

عمل scale للعناصر عند تمرير الماوس عليه في صفحات ويب فلاتر في هذا المقال نشارك…

التعامل مع Map #3 : شرح كيف يمكنك تحديث بيانات موقع المستخدم بواسطة برنامج اندرويد ستوديو .
التعامل مع Map #3 : شرح كيف يمكنك تحديث بيانات موقع المستخدم بواسطة برنامج اندرويد ستوديو .

  مرحبا بكم متابعي شروحات تطوير تطبيقات الاندرويد هذا هو الدرس الثالث من دروس التعامل…

🚫 مانع الإعلانات مفعل

يجب إيقاف مانع الإعلانات لاستكمال تصفح الموقع