Column

🧱 ما هي Column؟
  • Column هي ويدجت (عنصر واجهة مستخدم) في Flutter تقوم بترتيب مجموعة من الودجات (widgets) عموديًا (من الأعلى للأسفل أو العكس حسب الاتجاه).
Column(
  children: [
    Text('مرحبا'),
    Icon(Icons.star),
  ],
)
Dart
🧩 متى نستخدم Column؟
  • لعرض عناصر فوق بعضها مثل:
    • نموذج تسجيل دخول (Login Form)
    • عناصر الشاشة في صفحة تفاصيل
    • مزيج من أزرار ونصوص وصور بشكل رأسي
📌 أهم خصائص Column
1. children

قائمة العناصر التي توضع داخل العمود.

Column(
  children: [
    Text('العنصر الأول'),
    Text('العنصر الثاني'),
  ],
)
Dart
2. mainAxisAlignment

تتحكم في توزيع العناصر على المحور العمودي (الرأسي)

القيمةالتأثير
startالعناصر تبدأ من الأعلى (افتراضي)
endالعناصر تبدأ من الأسفل
centerالعناصر في الوسط
spaceBetweenفراغ متساوٍ بين العناصر فقط
spaceAroundفراغ متساوٍ حول كل عنصر
spaceEvenlyفراغات متساوية بين وحول كل العناصر

🧠 في Column، Main Axis = المحور العمودي

3. crossAxisAlignment

تتحكم في محاذاة العناصر على المحور الأفقي

القيمةالتأثير
startمحاذاة إلى اليسار (أو اليمين في RTL)
endمحاذاة إلى الجهة الأخرى
centerتوسيط أفقي
stretchتمدد العرض ليملأ كامل المحور الأفقي
baselineالمحاذاة حسب خط الأساس للنص (يتطلب textBaseline)

🧠 Cross Axis في Column هو المحور الأفقي (العرض)

4. mainAxisSize

هل تأخذ Column كل الارتفاع المتاح، أم فقط على حسب محتواها؟

القيمةالتأثير
MainAxisSize.maxيملأ كامل الشاشة عموديًا (افتراضي)
MainAxisSize.minيأخذ فقط المساحة اللازمة للعناصر
5. textDirection

يؤثر على اتجاه المحاذاة الأفقي في حال استخدام start و end

القيمةالتأثير
TextDirection.ltrمن اليسار لليمين
TextDirection.rtlمن اليمين لليسار
6. verticalDirection

يحدد اتجاه عرض العناصر عموديًا

القيمةالتأثير
downمن الأعلى للأسفل (افتراضي)
upمن الأسفل للأعلى
7. clipBehavior

قص المحتوى الزائد إذا خرج عن حدود العمود

القيمةالتأثير
Clip.noneلا يتم القصّ
Clip.hardEdge، antiAliasيتم القص بحسب الطريقة
🔁 مثال شامل:
Column(
  mainAxisAlignment: MainAxisAlignment.spaceBetween,
  crossAxisAlignment: CrossAxisAlignment.center,
  children: [
    Text('أعلى'),
    Icon(Icons.star),
    ElevatedButton(onPressed: () {}, child: Text('زر')),
  ],
)
Dart
💡 ملاحظات مهمة:
  • مثل Row، لا تدعم Column التمرير تلقائيًا.
    إذا زاد المحتوى عن الشاشة، يجب استخدام:
SingleChildScrollView(
  child: Column(
    children: [...],
  ),
)
Dart
🔁 الفرق بين Expanded و Flexible داخل Column
Expanded

تملأ كل المساحة المتبقية عموديًا:

Column(
  children: [
    Text('أعلى'),
    Expanded(child: Container(color: Colors.blue)),
  ],
)
Dart
Flexible

يستخدم جزء من المساحة بشكل مرن، دون إجبار

Column(
  children: [
    Flexible(child: Container(color: Colors.green)),
    Text('أسفل'),
  ],
)
Dart
📦 مقارنة سريعة بين Row و Column
الميزةRowColumn
ترتيب أفقي✔️
ترتيب عمودي✔️
mainAxis =أفقيعمودي
crossAxis =عموديأفقي
Scroll مطلوب عند overflow✔️✔️
🛠️ مثال تطبيقي واقعي
SingleChildScrollView(
  child: Padding(
    padding: EdgeInsets.all(16.0),
    child: Column(
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: [
        Text(
          'تسجيل الدخول',
          style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
        ),
        SizedBox(height: 20),
        TextField(decoration: InputDecoration(labelText: 'البريد')),
        SizedBox(height: 10),
        TextField(obscureText: true, decoration: InputDecoration(labelText: 'كلمة المرور')),
        SizedBox(height: 20),
        ElevatedButton(
          onPressed: () {},
          child: Text('تسجيل الدخول'),
        ),
      ],
    ),
  ),
)
Dart
✅ الخلاصة
الخاصيةColumn
ترتيب عمودي للعناصر✔️
يدعم المحاذاة الأفقية✔️
التمدد ممكن باستخدام Expanded و Flexible✔️
لا يلف تلقائيًا عند الزيادة
يجب لفّه بـ ScrollView أحيانًا✔️