Dart: تركيب بيئة التطوير والأدوات في Dart — من تثبيت SDK
آخر تحديث: 2026-08-26
الخطوة الأولى لكتابة كود جيد هي إعداد بيئة جيدة.
1. ما ستتعلمه
- تثبيت Dart SDK (Windows / macOS / Linux) وتكوين PATH
- تكوين VS Code بامتداد Dart وإعدادات المصحح
- الأوامر الأساسية الأربعة:
dart run/dart compile/dart format/dart analyze - مقدمة إلى
pubspec.yamlوقوالبdart create
2. قصة مطور حقيقي
(1) نقطة الألم: "البيئة مكسورة" هي أعذار المبتدئين الأكثر شيوعًا
سارة طالبة جامعية في CS أنشأت مشروع Dart لأول مرة. قضت يومين فقط في تثبيت SDK، وأخيرًا ظهرت رسالة خطأ عند التشغيل. بحثت عن حلول في Stack Overflow ووجدت 6 إجابات متضاربة: "أعد تثبيت"، "غيّر إصدار SDK"، "احذف مجلد .pub-cache"، "أعد تهيئة PATH"، "استخدم Flutter بدلاً من ذلك"، "استخدم DartPad". غارقة، سألت صديقها المطور: "ما الذي ينقصني؟" أجاب: "خمس دقائق من التثبيت، كتبت للتو وثيقة تكوين البيئة..."
(2) حل Dart
الإخراج: استغرق الأمر 5 دقائق لقراءتها. بدأت في كتابة Dart بعد 10 دقائق. تحررت من كابوس التثبيت.
# 5 دقائق لتبدأ — كل ما تحتاجه
$ brew install dart # macOS
$ dart --version # Dart SDK version 3.4.0
$ dart create hello_dart
$ cd hello_dart && dart run
Hello, world!*
(3) النتيجة: 2 أيام → 10 دقائق
| المؤشر | قبل الوثيقة | بعد الوثيقة |
|---|---|---|
| أول عملية تثبيت | 2 أيام (محاولة + خطأ) | 5 دقائق (نسخ-لصق) |
| عدد رسائل الخطأ | 15+ | 0 |
| معدل التخلي عن Dart | 60% (المبتدئين) | <5% |
| وقت كتابة "Hello World" | 3 أيام | 10 دقائق |
قبل: 2 أيام من الإحباط ← استسلام 60%
بعد: 5 دقائق من التثبيت ← كتابة 10 دقائق "Hello World"
ROI: 288 مرة أسرع في التثبيت
3. تثبيت Dart SDK
(1) اختيار الإصدار
graph TB
A[تريد استخدام Dart] --> B{هدفك؟}
B -->|تطوير Flutter| C[Dart SDK الأحدث<br/>+ Flutter SDK]
B -->|تطوير Dart النقي| D[Dart SDK الأحدث]
B -->|التوافق مع مشروع قديم| E[إصدار ثابت محدد]
C --> F[dart --version ≥ 3.0]
D --> F
E --> G[تحقق من pubspec.yaml<br/>environment sdk]
(2) التثبيت عبر نظام التشغيل
macOS (Homebrew — موصى به)
# التحديث أولاً
$ brew update
# تثبيت Dart
$ brew install dart
# التحقق
$ dart --version
Dart SDK version 3.4.0 (stable)
macOS (تنزيل مباشر)
# تنزيل من الموقع الرسمي
$ curl -O https://storage.googleapis.com/dart-archive/channels/stable/release/3.4.0/sdk/dartsdk-macos-x64-release.zip
# فك الضغط
$ unzip dartsdk-macos-x64-release.zip -d /opt
# تكوين PATH (zsh: ~/.zshrc، bash: ~/.bash_profile)
$ echo 'export PATH="/opt/dart-sdk/bin:$PATH"' >> ~/.zshrc
$ source ~/.zshrc
# التحقق
$ dart --version
Windows (Chocolatey — موصى به)
> choco install dart-sdk
# أو winget
> winget install Dart.DartSDK
Windows (تنزيل يدوي)
- تنزيل من dart.dev/get-dart → ملف ZIP
- فك الضغط إلى
C:\dart-sdk - إعدادات النظام → متغيرات البيئة → Path → إضافة
C:\dart-sdk\bin - أعد فتح PowerShell
> dart --version
Dart SDK version 3.4.0 (stable)
Linux (APT)
# 1. إضافة مفتاح GPG
$ wget -qO- https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo gpg --dearmor -o /usr/share/keyrings/dart.gpg
# 2. إضافة مستودع APT
$ echo 'deb [signed-by=/usr/share/keyrings/dart.gpg arch=amd64] https://storage.googleapis.com/download.dart.tv/linux/debian stable main' | sudo tee /etc/apt/sources.list.d/dart_stable.list
# 3. التثبيت
$ sudo apt update
$ sudo apt install dart
# 4. تكوين PATH
$ echo 'export PATH="/usr/lib/dart/bin:$PATH"' >> ~/.bashrc
$ source ~/.bashrc
# التحقق
$ dart --version
▶ مثال: التحقق من نجاح التثبيت
# بعد التثبيت، نفّذ هذه الأوامر للتحقق
$ dart --version
Dart SDK version 3.4.0 (stable) # ✅ الإصدار صحيح
$ dart doctor
[✓] Dart (version 3.4.0) # ✅ Dart نفسها
[✓] Pub (version 3.4.0) # ✅ مدير الحزم
[✓] Dart Analysis Server # ✅ خدمة تحليل الكود
[✓] Connected Devices # ✅ الاتصال بالأجهزة
[✓] HTTP connectivity # ✅ اتصال الشبكة
# إذا رأيت [✗]، يجب إصلاح المشكلة قبل المتابعة
> **الإخراج:** كل التحققات [✓] تعني أن البيئة جاهزة للتطوير. أي [�] يحتاج إصلاح قبل كتابة كود Dart.
(3) الإصلاح عند مواجهة المشاكل
| رمز الخطأ | السبب | الحل |
|---|---|---|
dart: command not found |
PATH غير مكوّن | أضف دليل dart-sdk/bin إلى PATH |
Permission denied |
أذونات ملف | chmod +x dart-sdk/bin/dart (Linux/macOS) |
Error: Dart is not compatible |
إصدار قديم | أعد تثبيت الإصدار 3.0+ |
Pub get failed |
مشكلة في الشبكة | تكوين PUB_HOSTED_URL أو استخدام VPN |
4. VS Code: أفضل بيئة تطوير لـ Dart
(1) التثبيت والامتدادات الضرورية
# 1. تنزيل VS Code: https://code.visualstudio.com/
# 2. التثبيت
$ sudo snap install code --classic # Linux
# 3. تثبيت امتدادات Dart
$ code --install-extension Dart-Code.dart-code
$ code --install-extension Dart-Code.flutter
الامتدادات الموصى بها:
| الامتداد | المعرّف | الوظيفة |
|---|---|---|
| Dart (ضروري) | Dart-Code.dart-code |
تلوين بناء الجملة، الإكمال التلقائي، التحقق |
| Flutter (اختياري) | Dart-Code.flutter |
ميزات تطوير Flutter الإضافية |
| Error Lens (موصى به) | Alexander.errorlens |
عرض الأخطاء والتحذيرات في السطر نفسه |
| Code Runner | formulahendry.code-runner |
تشغيل سريع بالنقر بزر الفأرة الأيمن |
| Todo Tree | Gruntfuggly.todo-tree |
عرض TODO و FIXME في شجرة |
(2) تكوين الإعدادات
افتح ~/.config/Code/User/settings.json (أو Code → Preferences → Settings):
{
"dart.sdkPath": "/usr/lib/dart",
"editor.formatOnSave": true,
"editor.tabSize": 2,
"editor.rulers": [80, 100],
"files.trimTrailingWhitespace": true,
"files.insertFinalNewline": true,
"[dart]": {
"editor.tabSize": 2,
"editor.formatOnSave": true,
"editor.defaultFormatter": "Dart-Code.dart-code"
}
}
(3) تكوين debugger
افتح .vscode/launch.json في جذر المشروع:
{
"version": "0.2.0",
"configurations": [
{
"name": "Dart",
"type": "dart",
"request": "launch",
"program": "bin/main.dart"
},
{
"name": "Dart (attach)",
"type": "dart",
"request": "attach"
}
]
}
▶ مثال: تكوين بيئة تطوير كاملة
# 1. إنشاء مجلد المشروع
$ mkdir -p ~/projects/hello_dart
$ cd ~/projects/hello_dart
# 2. تهيئة مشروع Dart
$ dart create -t console-full .
$ ls
analysis_options.yaml bin/ lib/ pubspec.yaml test/
# 3. فتح VS Code
$ code .
# 4. تعديل bin/main.dart
$ cat bin/main.dart
void main(List<String> arguments) {
print('Hello, Dart!');
}
> **الإخراج:** هيكل المشروع الكامل:
> - `bin/main.dart` — نقطة دخول البرنامج
> - `lib/` — ملفات المكتبة
> - `test/` — ملفات الاختبار
> - `pubspec.yaml` — تكوين التبعيات
> - `analysis_options.yaml` — تكوين linter
(4) اختصارات لوحة المفاتيح الأساسية
| مفتاح الاختصار | الوظيفة |
|---|---|
F5 |
بدء التصحيح |
Shift+F5 |
إيقاف التصحيح |
F9 |
تبديل نقطة التوقف |
F10 |
تخطي (خطوة فوق) |
F11 |
دخول (خطوة إلى) |
Shift+Alt+F |
تنسيق الكود |
Ctrl+. (Win/Linux) / Cmd+. (macOS) |
الإصلاح السريع |
5. الأوامر الأساسية الأربعة: run / compile / format / analyze
(1) dart run — تشغيل البرنامج
# تشغيل البرنامج مباشرة
$ dart run
Hello, Dart!
# تشغيل ملف محدد
$ dart run bin/main.dart
# تشغيل في وضع hot reload (لـ Flutter)
$ dart run --observe
# تمرير معاملات سطر الأوامر
$ dart run bin/main.dart arg1 arg2
(2) dart compile — ترجمة إلى ملف قابل للتنفيذ
# الترجمة إلى AOT أصلي
$ dart compile exe bin/main.dart -o build/hello
$ ./build/hello
Hello, Dart!
# الترجمة إلى JavaScript
$ dart compile js bin/main.dart -o build/hello.js
$ node build/hello.js
Hello, Dart!
# الترجمة إلى AOT kernel (حجم أصغر، أبطأ)
$ dart compile aot-snapshot bin/main.dart
| وضع الترجمة | الإخراج | حجم | سرعة البدء | سيناريو الاستخدام |
|---|---|---|---|---|
JIT (dart run) |
تنفيذ في VM | 0 (تطوير فقط) | 100ms | التطوير اليومي |
AOT (compile exe) |
ثنائي أصلي | 8-15MB | 10ms | النشر في الإنتاج |
JS (compile js) |
ملف JavaScript | 1-3MB | 50ms | تشغيل على الويب |
| kernel | AOT snapshot | 2-4MB | 20ms | بيئات محدودة الموارد |
(3) dart format — تنسيق الكود تلقائيًا
# تنسيق ملف واحد
$ dart format bin/main.dart
Formatted 1 file in 0.05s.
# تنسيق المشروع بأكمله
$ dart format .
# التحقق من التنسيق دون تعديل
$ dart format --output=none --set-exit-if-changed .
# الإرجاع 0 إذا كان منسقًا، 1 إذا احتاج إلى تنسيق
# إعدادات مخصصة (.dart_tool/dartfmt.cfg)
$ cat .dart_tool/dartfmt.cfg
line-length=100
(4) dart analyze — فحص الكود الثابت
# التحليل الأساسي
$ dart analyze
Analyzing hello_dart...
No issues found!
# عند وجود أخطاء
$ dart analyze lib/calculator.dart
error • The argument type 'String' can't be assigned to the parameter type 'int' • calculator.dart:10:5
# أنواع المشاكل
$ dart analyze --show=type
# info: تلميحات أسلوب
# warning: مشكلات محتملة
# error: أخطاء لا يمكن تشغيلها
▶ مثال: سير العمل اليومي الكامل
# 1. إنشاء مشروع جديد
$ dart create my_app
$ cd my_app
# 2. تشغيل البرنامج (تعديل bin/main.dart أولاً)
$ dart run
Hello, world!
# 3. التحقق من الكود
$ dart analyze
No issues found!
# 4. تنسيق الكود
$ dart format .
# 5. تشغيل الاختبارات
$ dart test
+00:00 ✓ All tests passed!
# 6. ترجمة إلى ثنائي إنتاجي
$ dart compile exe bin/main.dart -o build/my_app
$ ./build/my_app
Hello, world!
> **الإخراج:** سير العمل اليومي الكامل: تطوير → فحص → تنسيق → اختبار → نشر. كل أمر يخدم غرضًا محددًا.
(5) dart pub — إدارة الحزم
# تهيئة مشروع جديد
$ dart pub get
# إضافة تبعية
$ dart pub add http
Resolving dependencies...
+ http 1.2.0
Changed 1 dependency in my_app!
# إضافة تبعية تطوير
$ dart pub add --dev test
# ترقية التبعيات
$ dart pub upgrade
# عرض الحزم المثبتة
$ dart pub deps
6. pubspec.yaml: مركز تكوين المشروع
(1) الهيكل الأساسي
# pubspec.yaml — مركز تكوين مشروع Dart
name: hello_dart
description: "تطبيق Dart الأول من Bob"
version: 1.0.0
publish_to: none # لا تنشر على pub.dev
environment:
sdk: ^3.4.0 # تبعية إصدار Dart SDK
dependencies:
# الحزم التي يحتاجها وقت التشغيل
http: ^1.2.0
args: ^2.4.2
dev_dependencies:
# تبعيات التطوير والاختبار فقط
test: ^1.24.0
lints: ^3.0.0
(2) شرح كل حقل
| الحقل | الوظيفة | مثال |
|---|---|---|
name |
اسم المشروع (snake_case) | data_pipeline |
description |
وصف قصير | "أداة معالجة البيانات" |
version |
إصدار SemVer | 1.0.0 |
environment.sdk |
إصدار Dart المطلوب | ^3.4.0 (≥ 3.4.0 < 4.0.0) |
dependencies |
تبعيات وقت التشغيل | http: ^1.2.0 |
dev_dependencies |
تبعيات التطوير | test: ^1.24.0 |
(3) ضبط الإصدار SemVer
# بناء جملة ضبط الإصدار: ^major.minor.patch
dependencies:
http: ^1.2.0 # ≥ 1.2.0 < 2.0.0
args: ^2.4.2 # ≥ 2.4.2 < 3.0.0
collection: ^1.18.0
▶ مثال: مشروع Bob DataPipeline pubspec.yaml
# pubspec.yaml لمشروع Bob DataPipeline
name: data_pipeline
description: "أداة معالجة بيانات التجارة الإلكترونية متعددة المنصات"
version: 0.1.0
publish_to: none
environment:
sdk: ^3.4.0
dependencies:
args: ^2.4.2 # تحليل معاملات CLI
http: ^1.2.0 # طلبات HTTP
path: ^1.9.0 # معالجة مسارات الملفات
csv: ^6.0.0 # تحليل/تسلسل CSV
json_annotation: ^4.9.0 # تعليقات JSON
dev_dependencies:
test: ^1.24.0
lints: ^3.0.0
coverage: ^1.7.0
الإخراج: عند تشغيل
dart pub get، سيتم تنزيل جميع التبعيات (http, path, csv, إلخ) وحفظها في ملفpubspec.lockلضمان التكرار.
7. Hello World: أول كود Dart لك
(1) أبسط Hello World
// bin/main.dart
void main() {
print('Hello, Dart!');
}
$ dart run
Hello, Dart!
(2) Hello World مع معاملات سطر الأوامر
// bin/main.dart
void main(List<String> arguments) {
print('مرحبًا، Dart!');
print('معاملات سطر الأوامر: ${arguments.length}');
for (var i = 0; i < arguments.length; i++) {
print(' [$i]: ${arguments[i]}');
}
}
$ dart run arg1 arg2 --flag value
مرحبًا، Dart!
معاملات سطر الأوامر: 4
[0]: arg1
[1]: arg2
[2]: --flag
[3]: value
(3) Hello World مع حزمة args
// bin/main.dart
import 'package:args/args.dart';
void main(List<String> arguments) {
final parser = ArgParser()
..addOption('name', abbr: 'n', defaultsTo: 'World')
..addFlag('verbose', abbr: 'v');
final results = parser.parse(arguments);
final name = results['name'] as String;
final verbose = results['verbose'] as bool;
if (verbose) {
print('الوضع المفصّل مُمكّن');
}
print('مرحبًا، $name!');
}
$ dart run
مرحبًا، World!
$ dart run --name Bob
مرحبًا، Bob!
$ dart run --verbose --name Alice
الوضع المفصّل مُمكّن
مرحبًا، Alice!
(4) تهيئة VS Code debugger Hello World
// bin/main.dart
int fibonacci(int n) {
if (n < 2) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
void main() {
final n = 10;
print('fibonacci($n) = ${fibonacci(n)}');
}
- ضع نقطة توقف على سطر
return n;من دالةfibonacci - اضغط
F5لبدء التصحيح - اضغط
F11لإدخال الاستدعاء العودي - اعرض قيم
nفي اللوحة اليسرى
> **الإخراج:** fibonacci(10) = 55
> يساعد التصحيح في فهم التنفيذ العودي لـ fibonacci، وهو أداة تعليمية رائعة.
▶ مثال: أول كود Dart كامل لـ Bob
// مشروع DataPipeline لـ Bob
import 'package:args/args.dart';
void main(List<String> arguments) {
final parser = ArgParser()
..addOption('input', abbr: 'i', help: 'مسار ملف البيانات')
..addOption('output', abbr: 'o', help: 'مسار الإخراج')
..addFlag('verbose', abbr: 'v');
final results = parser.parse(arguments);
print('=== DataPipeline Starter ===');
print('الإدخال: ${results['input']}');
print('الإخراج: ${results['output']}');
print('المفصّل: ${results['verbose']}');
}
$ dart run --input data.csv --output result.json --verbose
=== DataPipeline Starter ===
الإدخال: data.csv
الإخراج: result.json
المفصّل: true
> **الإخراج:** مشروع CLI بسيط يقبل معاملات سطر الأوامر ويطبع الإعدادات. هذا هو أساس خط أنابيب البيانات الذي ستوسعه طوال المسار التعليمي.
8. استكشاف الأخطاء وإصلاحها: المشكلات الشائعة
(1) "dart: command not found"
# المشكلة
$ dart --version
zsh: command not found: dart
# الحل 1: تكوين PATH
$ echo 'export PATH="/opt/dart-sdk/bin:$PATH"' >> ~/.zshrc
$ source ~/.zshrc
# الحل 2: استخدام المسار الكامل
$ /opt/dart-sdk/bin/dart --version
# الحل 3 (macOS Homebrew): إعادة التثبيت
$ brew reinstall dart
(2) "Pub get failed"
# المشكلة: انقطاع الاتصال بـ pub.dev
$ dart pub get
Resolving dependencies...
Got socket error trying to find package ... at https://pub.dev.
# الحل 1: تكوين مرآة محلية
$ export PUB_HOSTED_URL=https://pub.flutter-io.cn
$ dart pub get
# الحل 2: استخدام VPN
# أو تكوين proxy الشركات
(3) "Version solving failed"
# المشكلة: تعارض إصدارات الحزم
$ dart pub get
Because my_app depends on http ^1.0.0 which requires SDK version ^3.0.0,
and my_app depends on http ^2.0.0 which requires SDK version ^3.4.0,
version solving failed.
# الحل: ترقية حزم التبعيات
$ dart pub upgrade
# أو تعديل pubspec.yaml يدويًا
$ vim pubspec.yaml
$ dart pub get
(4) "Debug adapter not connected"
# المشكلة: VS Code لا يمكنه الاتصال بـ Dart Analysis Server
# الحل 1: إعادة تشغيل Dart Analysis Server
# Ctrl+Shift+P → "Dart: Restart Analysis Server"
# الحل 2: التحقق من sdkPath
# settings.json → dart.sdkPath
# الحل 3: مسح ذاكرة التخزين المؤقت
$ rm -rf .dart_tool
$ dart pub get
9. ملخص نقاط المعرفة الأساسية لهذا الدرس
| # | المفهوم | المستوى | الأهمية |
|---|---|---|---|
| 1 | Dart SDK 3.0+ متعدد المنصات | مبتدئ | ⭐⭐⭐⭐⭐ |
| 2 | تكوين PATH: dart-sdk/bin | مبتدئ | ⭐⭐⭐⭐⭐ |
| 3 | VS Code + امتداد Dart = أفضل IDE | مبتدئ | ⭐⭐⭐⭐ |
| 4 | الأوامر الأساسية الأربعة: run/compile/format/analyze | مبتدئ | ⭐⭐⭐⭐⭐ |
| 5 | pubspec.yaml: مركز تكوين المشروع | مبتدئ | ⭐⭐⭐⭐ |
| 6 | dart create لإنشاء مشروع |
مبتدئ | ⭐⭐⭐ |
❓ أسئلة شائعة
fvm (Flutter Version Management) أو dvm (Dart Version Manager):# تثبيت fvm
$ dart pub global activate fvm
# تثبيت إصدارات متعددة
$ fvm install 3.0.0
$ fvm install 3.4.0
# تبديل الإصدار لكل مشروع
$ fvm use 3.4.0
dart run و dart bin/main.dart؟dart run يبحث عن ملف إدخال افتراضي (عادةً bin/main.dart)، dart run <file> يحدد الملف. dart bin/main.dart قديم ومهمل، يوصى باستخدام dart run..dart_tool/ الذي يظهر بعد dart pub get؟.packages — معلومات الحزم القديمة. عادة ما تتم إضافته إلى .gitignore، لا حاجة لإدارته يدويًا.dart analyze تحذيرات كثيرة في مشروع موجود؟dart fix --apply لتطبيق الإصلاحات التلقائية. بالنسبة للتحذيرات المتبقية، يمكنك اختيار تجاهلها في analysis_options.yaml:analyzer:
exclude:
- "**/*.g.dart"
📖 ملخص
- تثبيت Dart SDK: macOS عبر brew، Windows عبر choco، Linux عبر apt
- تكوين PATH: أضف دليل dart-sdk/bin، تحقق باستخدام
dart --version - VS Code + امتداد Dart: تلوين بناء الجملة، الإكمال التلقائي، التصحيح
- الأوامر الأساسية الأربعة:
dart run(تشغيل) /dart compile(ترجمة) /dart format(تنسيق) /dart analyze(فحص ثابت) - pubspec.yaml: مركز تكوين المشروع، يدير التبعيات والإصدارات
- Hello World: 3 طرق للتشغيل — بسيطة، مع معاملات، مع حزمة args
📝 تمارين
- أساسي (الصعوبة ⭐): ثبّت Dart SDK على نظامك، وأكمل
dart doctorللتأكد من أن جميع التحققات تمر، وأنشئ مشروعhello_bobباستخدامdart create، وعدّلbin/main.dartلإخراج "Hello, Bob!" مع اسمك الحالي من متغير بيئة. تلميح: استخدمPlatform.environmentللحصول على متغيرUSERNAMEأوUSER. - متوسط (الصعوبة ⭐⭐): أنشئ مشروع
data_pipeline_starter، وأضف حزمتيargsوpathكتبعيات، واكتب برنامج CLI يقبل معامل--input(مسار ملف) و--output(مسار الإخراج)، ويستخدمdart:ioلقراءة ملف الإدخال وحساب عدد الأسطر. اربط نقاط التوقف في VS Code لعرض قيمةlineCountعند التشغيل. تلميح: استخدمFile(path).readAsLinesSync()لقراءة الملف. - تحدٍّ (الصعوبة ⭐⭐⭐): أنشئ مشروع
multi_envيدير ثلاث بيئات (development/staging/production)، لكل منها تكوينات مختلفة (اسم، منفذ، نقطة نهاية API، مستوى السجل). استخدمdart compile exeلإنشاء ثنائي أصلي، وقم بالتغليف في برنامج نصي shellrun.shيستدعي الثنائي مع متغيرات بيئة مختلفة. تحقق من أن التجميع AOT ينتج ثنائيًا أقل من 15 ميجابايت ووقت بدء < 50ms. تلميح: مرر--defineأوString.fromEnvironmentلتضمين القيم في وقت الترجمة.