Checkbox 

📌 ما هو الـ Checkbox؟

هو ويدجت (Widget) في Flutter يمثل مربع اختيار يمكن أن يكون:

  • محدد ✅ (true)
  • غير محدد ⬜ (false)
  • أو شبه محدد (indeterminate) إذا استخدمت tristate: true.

يُستخدم لتفعيل أو إلغاء تفعيل خيار معيّن، أو تحديد عناصر متعددة.

🔹 البنية الأساسية
Checkbox(
  value: isChecked,          // الحالة الحالية (true / false / null إذا tristate)
  onChanged: (bool? value) { // ماذا يحدث عند التغيير
    setState(() {
      isChecked = value!;
    });
  },
)
Dart
⚙️ أهم الخصائص
الخاصيةالنوعالوصف
valuebool?الحالة الحالية للمربع (true, false, أو null مع tristate)
onChangedValueChanged<bool?>?الدالة التي تنفذ عند الضغط
activeColorColor?لون المربع عند التحديد
checkColorColor?لون علامة الصح داخل المربع
fillColorMaterialStateProperty<Color?>?طريقة حديثة لتحديد ألوان المربع حسب الحالة
focusColorColor?لون التأثير عند التركيز (Focus)
hoverColorColor?لون التأثير عند مرور الماوس
overlayColorMaterialStateProperty<Color?>?لون التغطية عند التفاعل
splashRadiusdouble?نصف قطر تأثير النقر
materialTapTargetSizeMaterialTapTargetSize?حجم منطقة النقر (افتراضي أو صغير)
tristateboolإذا كان المربع يدعم الحالة الثالثة (null)
🖼 مثال بسيط
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool isChecked = false;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text("مثال على Checkbox")),
        body: Center(
          child: Checkbox(
            value: isChecked,
            onChanged: (bool? value) {
              setState(() {
                isChecked = value!;
              });
            },
            activeColor: Colors.green, // لون المربع عند التحديد
            checkColor: Colors.white,  // لون الصح
          ),
        ),
      ),
    );
  }
}
Dart
📝 نصائح
  1. Checkbox لوحده يعطيك فقط المربع، إذا أردت نص بجانبه استخدم CheckboxListTile.
  2. إذا أردت أكثر من خيار يمكن تحديدهم معًا، استخدم قائمة من Checkbox أو CheckboxListTile.
  3. لتخصيص الشكل أكثر، استعمل fillColor مع MaterialStateProperty لتغيير اللون حسب حالة المربع (محدد، معطل، Hover…).

📌 ما هو CheckboxListTile؟

هو ويدجت جاهزة تعرض:

  • Checkbox (مربع اختيار).
  • عنوان (title).
  • وصف فرعي (subtitle) اختياري.
  • أيقونة أو صورة جانبية (secondary) اختيارية.
  • مع إمكانية النقر على أي مكان في الصف لتغيير الحالة، مش بس المربع.
🔹 البنية الأساسية
CheckboxListTile(
  value: ... ,        // الحالة الحالية (true / false)
  onChanged: ... ,    // ماذا يحدث عند التغيير
  title: ... ,        // العنوان
  subtitle: ... ,     // وصف فرعي (اختياري)
  secondary: ... ,    // أيقونة أو صورة (اختياري)
)
Dart
⚙️ أهم الخصائص
الخاصيةالنوعالوصف
valuebool?الحالة الحالية للمربع
onChangedValueChanged<bool?>?الدالة التي تنفذ عند النقر
titleWidgetالعنوان الرئيسي
subtitleWidget?نص فرعي أسفل العنوان
secondaryWidget?ويدجت على الجهة الأخرى (مثل أيقونة)
isThreeLineboolإذا كان لديك عنوان + سطرين نصوص
densebool?لتقليل المسافات
contentPaddingEdgeInsetsGeometry?مسافة داخلية حول المحتوى
activeColorColor?لون المربع عند التحديد
checkColorColor?لون الصح داخل المربع
fillColorMaterialStateProperty<Color?>?تحديد لون المربع حسب الحالة
tileColorColor?لون خلفية الصف
selectedTileColorColor?لون الخلفية عند التحديد
selectedboolلتغيير مظهر النص إذا كان محدد
controlAffinityListTileControlAffinityموقع المربع (leading أو trailing أو platform default)
autofocusboolإذا كان المربع يحصل على التركيز تلقائيًا
tristateboolإذا أردت 3 حالات (true / false / null)
🖼 مثال بسيط
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool isChecked = false;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text("مثال على CheckboxListTile")),
        body: CheckboxListTile(
          title: Text("تفعيل الإشعارات"),
          subtitle: Text("ستصلك تنبيهات عند وجود جديد"),
          secondary: Icon(Icons.notifications),
          value: isChecked,
          onChanged: (bool? value) {
            setState(() {
              isChecked = value!;
            });
          },
          activeColor: Colors.green, // لون المربع عند التحديد
          checkColor: Colors.white,  // لون الصح
        ),
      ),
    );
  }
}
Dart
📱 استخداماته الشائعة
  • إعدادات التطبيق (مثل تشغيل/إيقاف المزايا).
  • اختيار عناصر متعددة من قائمة خيارات.
  • تفعيل أو إلغاء تفعيل ميزة معينة بشكل واضح.