switch 

📌 ما هو الـ Switch؟

هو ويدجت (Widget) في Flutter تمثل زر تبديل (On / Off)، يُستخدم لتغيير حالة منطقية (true أو false).
تراه عادةً في الإعدادات لتفعيل أو تعطيل خيار.

🔹 البنية الأساسية (Constructor)
Switch(
  value: isOn,            // الحالة الحالية (true أو false)
  onChanged: (bool value) {
    setState(() {
      isOn = value;       // تحديث الحالة عند التغيير
    });
  },
)
Dart
⚙️ أهم الخصائص
الخاصيةالنوعالوصف
valueboolالحالة الحالية للمفتاح (true = مفعّل، false = غير مفعّل)
onChangedValueChanged<bool>الدالة التي تُنفذ عند تغيير الحالة
activeColorColorلون المقبض (Thumb) عند التفعيل
activeTrackColorColorلون المسار (Track) عند التفعيل
inactiveThumbColorColorلون المقبض عند التعطيل
inactiveTrackColorColorلون المسار عند التعطيل
activeThumbImageImageProviderصورة على المقبض عند التفعيل
inactiveThumbImageImageProviderصورة على المقبض عند التعطيل
focusColorColorلون التأثير عند التركيز (Focus)
hoverColorColorلون التأثير عند المرور بالماوس (Hover)
materialTapTargetSizeMaterialTapTargetSizeحجم منطقة النقر (افتراضي أو صغير)
mouseCursorMouseCursorشكل مؤشر الماوس عند المرور فوقه
🖼 مثال بسيط:
bool isOn = false;

Switch(
  value: isOn,
  onChanged: (value) {
    setState(() {
      isOn = value;
    });
  },
  activeColor: Colors.green,
  activeTrackColor: Colors.green.shade200,
  inactiveThumbColor: Colors.red,
  inactiveTrackColor: Colors.red.shade200,
)
Dart
🎨 تخصيص شكل الـ Switch
Switch(
  value: isOn,
  onChanged: (value) => setState(() => isOn = value),
  activeColor: Colors.white,
  activeTrackColor: Colors.blue,
  inactiveThumbColor: Colors.grey.shade200,
  inactiveTrackColor: Colors.grey.shade400,
  activeThumbImage: AssetImage('assets/on_icon.png'),
  inactiveThumbImage: AssetImage('assets/off_icon.png'),
)
Dart

هنا أضفنا صور للمقبض بدل اللون فقط.

📱 استخدامه داخل ListTile (شكل أنيق في الإعدادات)
ListTile(
  title: Text('تفعيل الإشعارات'),
  trailing: Switch(
    value: isOn,
    onChanged: (value) => setState(() => isOn = value),
  ),
)
Dart
📝 ملاحظات ونصائح
  1. لا تنسَ ربطه بـ setState إذا كنت داخل StatefulWidget حتى يتم تحديث الواجهة.
  2. يمكن تعطيل الـ Switch بجعل onChanged: null.
  3. عند تصميم تطبيق كبير، يفضل ربطه مع Provider أو Bloc بدلاً من setState.
  4. إذا أردت تحكم أكبر في الشكل، هناك ويدجت أخرى مثل Switch.adaptive ليتغير شكلها حسب النظام (iOS/Android).