لماذا Flutter؟
Flutter إطار عمل من Google لبناء تطبيقات بكود واحد تعمل على Android و iOS و Web و Windows و macOS و Linux. أشهر تطبيقاته: Google Pay، BMW، eBay Motors، Alibaba.
مزاياه:
- كود واحد لكل المنصّات
- أداء ممتاز — يُحوّل الكود إلى native
- Hot Reload — تعديل الكود يظهر فوراً (< ثانية)
- Widgets غنيّة — مئات المكوّنات الجاهزة
- مفتوح المصدر ومدعوم من مجتمع ضخم
التثبيت
Windows / Mac / Linux
- حمّل Flutter SDK من flutter.dev
- أضفه إلى PATH
- ثبّت Android Studio (للمحاكي) و VSCode مع إضافة Flutter
- شغّل
flutter doctorللتحقّق
flutter doctor
# يُظهر تقريراً بكل ما تحتاجأول تطبيق
flutter create my_first_app
cd my_first_app
flutter runفي ثوانٍ يفتح تطبيق counter افتراضي على الجهاز/المحاكي.
بنية المشروع
my_first_app/
├── lib/
│ └── main.dart # نقطة البدء
├── android/ # كود Android الأصلي
├── ios/ # كود iOS الأصلي
├── assets/ # صور وخطوط
└── pubspec.yaml # التبعياتالـ Widget: اللبنة الأساسية
كل شيء في Flutter Widget — الأزرار، النصوص، حتى التطبيق نفسه.
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: 'تطبيقي',
home: Scaffold(
appBar: AppBar(title: const Text('مرحباً')),
body: const Center(
child: Text('أهلاً بالعالم!'),
),
),
);
}
}StatelessWidget vs StatefulWidget
StatelessWidget — لا يتغيّر (نص ثابت، أيقونة):
class Greeting extends StatelessWidget {
final String name;
const Greeting({super.key, required this.name});
@override
Widget build(BuildContext context) {
return Text('أهلاً $name');
}
}StatefulWidget — يُحدَّث (عدّاد، نموذج):
class Counter extends StatefulWidget {
const Counter({super.key});
@override
State<Counter> createState() => _CounterState();
}
class _CounterState extends State<Counter> {
int count = 0;
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('$count', style: const TextStyle(fontSize: 48)),
ElevatedButton(
onPressed: () => setState(() => count++),
child: const Text('+1'),
),
],
);
}
}Layout: ترتيب العناصر
Column و Row
Column(
children: [
Text('الأول'),
Text('الثاني'),
Text('الثالث'),
],
)
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Icon(Icons.home),
Icon(Icons.settings),
],
)Container — الصندوق المرن
Container(
padding: const EdgeInsets.all(16),
margin: const EdgeInsets.symmetric(vertical: 8),
decoration: BoxDecoration(
color: Colors.blue.shade50,
borderRadius: BorderRadius.circular(12),
border: Border.all(color: Colors.blue),
),
child: const Text('محتوى داخل صندوق'),
)التنقّل بين الشاشات
// دفع شاشة جديدة
Navigator.push(
context,
MaterialPageRoute(builder: (_) => const DetailsScreen()),
);
// الرجوع
Navigator.pop(context);
// استبدال الشاشة
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (_) => const HomeScreen()),
);الأخطاء الشائعة
- "No Material widget found": لفّ التطبيق بـ
MaterialApp - "setState called after dispose": تحقّق بـ
if (mounted)قبل setState - الواجهة لا تُحدَّث: لا تنسَ
setState()عند تغيير القيم
الأسئلة الشائعة
Flutter vs React Native؟
- Flutter: أداء أفضل، UI موحّد بين iOS/Android، مجتمع متنامٍ
- React Native: يستخدم JavaScript (معروف)، مكوّنات native فعلية، شركات كبيرة
ابدأ بـ Flutter إن كنت تحبّ التصميم المتحكَّم به بالكامل.
هل أحتاج تعلّم Dart؟
نعم، لكنه سهل — إن كنت تعرف JavaScript أو Java، تتعلّمه في يومين.
هل Flutter مناسب للمشاريع الكبيرة؟
نعم — Alibaba بنت تطبيقها الرئيسي بـ Flutter. مناسب لأيّ حجم.
مقالات ذات صلة
الفرق بين Flutter و React Native: أيّهما تختار في 2026؟
مقارنة عميقة بين أشهر إطارَي عمل لتطوير الجوّال — الأداء، المجتمع، سوق العمل، وتجربة المطوّر.
كيفية نشر تطبيق Flutter على Google Play و App Store
خطوات عملية لرفع تطبيقك من جهازك إلى متاجر التطبيقات — Android أولاً ثم iOS.
State Management في Flutter: Provider، Riverpod، BLoC
إدارة الحالة أكبر تحدٍّ في تطبيقات Flutter. قارن بين أشهر 3 حلول واختر الأنسب لمشروعك.