void main() {
runApp(MyApp());
}
Dart🧩 1. void main()
:
✅ ما هي؟
- هذه هي نقطة البداية لأي برنامج بلغة Dart (اللغة التي تُستخدم في Flutter).
- يعني: عندما تبدأ تشغيل التطبيق، أول شيء يتم تنفيذه هو هذا الدالة
main()
.
✅ لماذا void
؟
- كلمة
void
تعني أن هذه الدالة لا تُرجع أي قيمة (أي لا تعيد نتيجة).
🧩 2. runApp(MyApp());
✅ ما هي؟
- هذه دالة من مكتبة Flutter الأساسية.
- تقوم بــ تشغيل التطبيق على شاشة الهاتف.
- تأخذ ويدجت (Widget) كوسيط – وهذا الوسيط هو عادةً أول واجهة في التطبيق.
في هذا المثال:
runApp(MyApp());
Dart- نحن نطلب من Flutter أن يعرض واجهة التطبيق التي تعرفنا عليها في كلاس اسمه
MyApp
.
void main() {
runApp(
MaterialApp(
title: "Main App",
home: Scaffold(
drawer: Drawer(),
appBar: AppBar(
title: Text("Main App", style: TextStyle(color: Colors.green)),
elevation: 5,
),
body: Center(child: Text("أهلا بكم بالدرس الأول")),
),
),
);
}
Dart🔤 ما هو MyApp
؟
هذا يكون عادة ويدجت رئيسي (Main Widget)، يكون معرف في مكان آخر من الكود، مثل:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'تطبيقي',
home: Scaffold(
appBar: AppBar(title: Text('مرحبًا')),
body: Center(child: Text('أهلاً بالعالم')),
),
);
}
}
Dart📌 تسلسل التشغيل في Flutter:
- يبدأ من
main()
. - ينفذ
runApp(MyApp())
. - يقوم Flutter برسم الواجهة التي تعود من
MyApp
. MyApp
ترجعMaterialApp
(غالبًا).- ثم
MaterialApp
تعرض صفحة البدايةhome
.
✅ ملاحظة للمبتدئين:
إذا أردت تشغيل واجهتك الخاصة، كل ما عليك فعله هو تعديل محتوى MyApp
بحيث تعرض ما تريد باستخدام Widgets.
✅ أولًا: ما هو MaterialApp
؟
📌 التعريف:
MaterialApp
هو الويدجت الرئيسي في تطبيقات Flutter المبنية باستخدام تصميم Material Design من Google.
وهو المسؤول عن ضبط إعدادات التطبيق العامة، مثل:
- العنوان (title)
- الثيم (Theme)
- اللغة (Locale)
- التنقل بين الصفحات (Routing)
- الصفحة الرئيسية (home)
⭐️ الاستخدام النموذجي:
void main() {
runApp(MaterialApp(
title: 'My App',
theme: ThemeData(primarySwatch: Colors.blue),
home: MyHomePage(),
));
}
Dart🧩 أهم الخصائص:
الخاصية | الوصف |
---|---|
home | الواجهة الأولى التي يتم عرضها عند تشغيل التطبيق |
title | عنوان التطبيق (يظهر في بعض الأنظمة مثل Android Task Switcher) |
theme | لتحديد ألوان وتنسيق التصميم الافتراضي للتطبيق |
darkTheme | لتحديد ثيم مظلم |
themeMode | لاختيار ما بين ThemeMode.light , ThemeMode.dark , أو ThemeMode.system |
routes | خريطة تنقل بين الشاشات باستخدام اسم كل شاشة |
initialRoute | لتحديد أي شاشة تظهر أولًا (بدلًا من home ) |
onGenerateRoute | يُستخدم لإنشاء صفحات عند التنقل باستخدام أسماء غير معرّفة في routes |
debugShowCheckedModeBanner | لإخفاء أو إظهار شعار “DEBUG” أثناء التطوير |
📍 لماذا نستخدم MaterialApp
؟
- يوفر بنية جاهزة لتصميم Material Design.
- يسهل التعامل مع التنقل بين الصفحات.
- يسمح بتخصيص الثيم العام للتطبيق.
- يُعتبر الغلاف العام لباقي ويدجتات التطبيق.
✅ ثانيًا: ما هو Scaffold
؟
📌 التعريف:
Scaffold
هو ويدجت يوفّر الهيكل الأساسي للشاشة (صفحة واحدة) بتصميم Material، ويُستخدم عادةً داخل الصفحة التي تظهر ضمن home
أو route
.
🧩 يقدم لك Scaffold العديد من المكونات الجاهزة:
الخاصية | الوظيفة |
---|---|
appBar | شريط التطبيق العلوي (AppBar) |
body | جسم الصفحة (المحتوى الرئيسي) |
floatingActionButton | زر عائم (مثل زر + لإضافة عنصر) |
bottomNavigationBar | شريط تنقل سفلي |
drawer | قائمة جانبية (Drawer) |
backgroundColor | لون خلفية الشاشة |
persistentFooterButtons | أزرار ثابتة أسفل الشاشة |
bottomSheet | شريط يظهر في الأسفل بشكل دائم |
resizeToAvoidBottomInset | هل يتم تعديل الحجم تلقائيًا عند ظهور لوحة المفاتيح؟ |
⭐️ مثال استخدام:
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('الصفحة الرئيسية')),
body: Center(child: Text('مرحبًا بك')),
floatingActionButton: FloatingActionButton(
onPressed: () {},
child: Icon(Icons.add),
),
);
}
}
Dart📍 الفرق بين MaterialApp
و Scaffold
:
العنصر | MaterialApp | Scaffold |
---|---|---|
المستوى | التطبيق بالكامل | شاشة واحدة داخل التطبيق |
الوظيفة | إدارة التنقل والثيم العام | تنظيم واجهة الشاشة بمكونات Material |
موقع الاستخدام | أعلى ويدجت في runApp() | داخل home أو routes |
📚 ملاحظات مهمة:
- لا يمكن استخدام
Scaffold
بدونMaterialApp
لأنScaffold
يعتمد علىMaterial Design
context. - يمكنك تخصيص
Scaffold
لعرض مختلف عناصر الواجهة مثلAppBar
وDrawer
دون الحاجة إلى بنائها يدويًا.