Flutter-WidgeFlutter-Widget

بعد أن استعرضنا هيكل مشروع Flutter، حان الوقت للدخول إلى قلبه: الـ Widgets.
في Flutter، كل شيء تقريبًا هو Widget: النصوص، الأزرار، الصور، حتى التخطيط نفسه.
تخيل أن تطبيقك عبارة عن لعبة “ليغو”، كل قطعة صغيرة (Widget) تُركب فوق الأخرى لتبني واجهة كاملة.


1. نقطة البداية: ملف main.dart

افتح الملف:

lib/main.dart

ستجد الكود الافتراضي الذي أنشأه Flutter عند إنشاء المشروع:

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}

2. تفكيك الكود خطوة بخطوة

الدالة main()

void main() {
  runApp(const MyApp());
}
  • هنا يبدأ كل شيء.
  • runApp() تُشغّل التطبيق وتعرض الـ Widget الذي نعطيه (هنا MyApp).

MyApp

class MyApp extends StatelessWidget { ... }
  • هو Widget رئيسي.
  • يُعيد MaterialApp وهو الغلاف الذي يوفر لنا تصميم Material Design من Google (الأزرار، الألوان، إلخ).

MyHomePage

  • هو صفحة البداية.
  • يحتوي على StatefulWidget بمعنى أن له حالة يمكن أن تتغير (مثل عدّاد الأزرار).

Scaffold

  • هيكل الصفحة الأساسي.
  • يوفر:
    • AppBar (شريط علوي).
    • body (محتوى الصفحة).
    • floatingActionButton (زر دائري عائم).

العداد (Counter)

  • كل مرة تضغط على الزر + يتم استدعاء _incrementCounter().
  • هذه الدالة تستخدم setState() لتحديث القيمة وإعادة بناء واجهة المستخدم.

3. تجربة أول تعديل

لنجرّب تعديل النص في الصفحة:

Text(
  'مرحبًا بك في أول تطبيق Flutter!',
  style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
),

سيظهر النص الجديد في منتصف الشاشة بدل النص الافتراضي.


4. مفاهيم أساسية تعلمناها هنا

  • Widget: كل عنصر في الواجهة.
  • StatelessWidget: واجهة لا تتغير مع الوقت.
  • StatefulWidget: واجهة يمكن أن تتغير (تستجيب للأحداث).
  • Scaffold: الإطار الأساسي لشاشة بتصميم Material.
  • setState(): الطريقة التي نخبر بها Flutter أن هناك تغيير يجب أن يُعرض.

ملخص الفصل

  • بدأنا من main.dart وشرحنا كيف يعمل الكود الافتراضي.
  • تعرّفنا على Widgets رئيسية: MaterialApp, Scaffold, AppBar, Text, FloatingActionButton.
  • ميّزنا بين StatelessWidget و StatefulWidget.
  • أجرينا تعديل بسيط لإضافة نص مخصص.

By احمد علي

مطور تطبيقات هواتف ذكية باستخدام Flutter، وصانع محتوى تقني يكتب عن الذكاء الاصطناعي والبرمجة وتطورات التكنولوجيا الحديثة. أسعى لتبسيط الأفكار المعقدة ومشاركة خبرتي مع المهتمين بالمجال.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *