الاستماع باستخدام await for
اقرأ الأحداث عند وصولها
الاستماع باستخدام await for درس مجاني في Dart Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Dart Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Dart Academy 4 دروس في المجموع.
ما هو Stream؟
إن Stream سلسلة من القيم التي تصل بمرور الوقت، لا دفعةً واحدة. فكّر فيه على أنه Future يمكنه تقديم نتائج كثيرة بدلًا من نتيجة واحدة.
Streams مقابل Futures
يمنحك Future قيمة واحدة لاحقًا. أما Stream فيسلّمك سلسلة كاملة من الأحداث، حدثًا تلو الآخر، إلى أن يخبرك بأنه انتهى. 🌊
تعرّف إلى await for
تقرأ حلقة await for الأحداث من stream فور وصولها. وفي كل دورة من الحلقة تحصل على القيمة التالية التي يصدرها stream.
await for (final value in stream) {
print(value);
}يجب أن يكون داخل async
لأن await for تتوقف مؤقتًا لانتظار الأحداث، فهي تعمل فقط داخل دالة معلّمة بـ async. وتظل الدالة معلّقة حتى تصبح القيمة التالية جاهزة.
Future<void> show(Stream<int> s) async {
await for (final n in s) print(n);
}Stream للاستماع إليه
يمكنك إنشاء stream سريع باستخدام Stream.fromIterable. فهو يصدر كل عنصر من عناصر القائمة بالترتيب، ما يجعله مناسبًا لتجربة await for.
final stream = Stream.fromIterable([1, 2, 3]);تكرار الأحداث
اربط ذلك stream مع await for، وستعمل الحلقة مرة واحدة لكل قيمة صادرة. في هذا المثال تطبع 1، ثم 2، ثم 3.
await for (final n in Stream.fromIterable([1, 2, 3])) {
print(n);
}الانتظار بين الأحداث
غالبًا ما تتوقف streams الحقيقية مؤقتًا بين الأحداث. ومع await for، ينتظر الكود ببساطة أثناء الفواصل، ثم يستأنف التنفيذ فور وصول القيمة التالية. ⏳
final ticks = Stream.periodic(
Duration(seconds: 1), (i) => i);تنتهي الحلقة تلقائيًا
عندما ينتهي stream من إرسال الأحداث، يرسل إشارة done. وتخرج حلقة await for من تلقاء نفسها، ثم تتابع الدالة تنفيذها بعد الحلقة.
await for (final n in finiteStream) print(n);
print('Stream finished');تصل الأخطاء إلى الحلقة
إذا أصدر stream حدث error، فسيُرمى الخطأ مباشرة عند سطر await for. ويمكنك إحاطة الحلقة بـ try/catch للتعامل معه بسلاسة.
try {
await for (final n in maybeFails) print(n);
} catch (e) {
print('Caught: $e');
}يلغي break الاستماع
يؤدي استخدام break داخل await for إلى إيقاف الحلقة وإلغاء اشتراكك في stream بهدوء. ولن تتلقى بعد ذلك الأحداث المتبقية منه.
await for (final n in stream) {
if (n > 100) break;
}مستمع واحد في كل مرة
تشترك حلقة await for في stream ذي اشتراك واحد. ولا يمكن قراءة هذا stream إلا مرة واحدة، لذا ستؤدي حلقة ثانية عليه إلى إطلاق خطأ.
اختبار سريع
اختبر معلوماتك عن await for.
مراجعة
تعلمت أن Stream يسلّم قيمًا متعددة بمرور الوقت، وأن await for تقرؤها واحدة تلو الأخرى داخل دالة async حتى تصل إلى done. أحسنت! 🎉
تعلم Dart مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 30
- الدروس
- 120
الأسئلة الشائعة
هل درس «الاستماع باستخدام await for» مجاني؟
نعم — نص درس «الاستماع باستخدام await for» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Dart Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Dart Academy 4 دروس في المجموع.
ماذا ستتعلم في «الاستماع باستخدام await for»؟
اقرأ الأحداث عند وصولها تتمرن على Dart Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Dart Academy؟
لا تُشترط خبرة سابقة. Dart Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «الاستماع باستخدام await for»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Dart Academy هذا؟
نعم. كل درس في Dart Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الاستماع باستخدام await for
- Streams أحادية البث في مقابل Streams المذاعة
- تحويل Streams: map وwhere وtake
- إنشاء Streams باستخدام async*