Streams أحادية البث في مقابل Streams المذاعة
اختر Stream المناسبة لعدة مستمعين
Streams أحادية البث في مقابل Streams المذاعة درس مجاني في Dart Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Dart Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Dart Academy 4 دروس في المجموع.
نوعان من Streams
تأتي Dart streams بنوعين: single-subscription وbroadcast. ويعتمد اختيار النوع المناسب على عدد المستمعين الذين تحتاج إليهم.
Streams ذات اشتراك واحد
يسمح stream من نوع single-subscription بمستمع واحد بالضبط طوال فترة وجوده. وهذا هو النوع الافتراضي، وهو مثالي لتسلسل يُقرأ مرة واحدة، مثل قراءة ملف. 📄
استمع مرة واحدة فقط
إذا حاولت الاستماع إلى stream ذي اشتراك واحد مرتين، فستطلق Dart خطأ من النوع StateError. إذ يتذكر stream أن لديه مستمعه الوحيد بالفعل.
final s = Stream.fromIterable([1, 2]);
s.listen(print);
s.listen(print); // throws StateErrorيُخزّن مؤقتًا حتى تستمع إليه
ينتظر stream ذو الاشتراك الواحد بصبر. فهو لا ينتج أي أحداث حتى يبدأ شيء ما بالاستماع إليه، لذلك لا تفوتك أي قيمة.
Broadcast Streams
يسمح stream من نوع broadcast لعدة مستمعين بالاشتراك في الوقت نفسه. ويتلقى كل مستمع نشط الأحداث نفسها فور صدورها. 📡
التحويل إلى Broadcast
حوّل stream ذا اشتراك واحد إلى stream مشترك باستدعاء asBroadcastStream. والآن يمكن لعدة مستمعين الاشتراك فيه.
final shared = source.asBroadcastStream();
shared.listen(print);
shared.listen((v) => log(v));يفوّت المستمعون المتأخرون الأحداث
لا تخزّن Broadcast streams الأحداث مؤقتًا. فالمستمع الذي يشترك متأخرًا لا يرى إلا الأحداث الصادرة منذ لحظة اشتراكه، ولا يرى الأحداث السابقة أبدًا.
تحدد Controllers النوع
ينشئ StreamController stream ذا اشتراك واحد افتراضيًا. استخدم المُنشئ broadcast عندما تريد دعم عدة مستمعين.
final ctrl = StreamController<int>.broadcast();
ctrl.stream.listen(print);متى تستخدم النوع ذي الاشتراك الواحد
استخدم stream من نوع single-subscription عندما تتدفق البيانات مرة واحدة إلى مستهلك واحد، مثل وحدات الاستجابة من الشبكة أو البيانات المقروءة من ملف.
متى تستخدم Broadcast
اختر stream من نوع broadcast للأحداث المستمرة التي تهتم بها أجزاء متعددة من تطبيقك، مثل نقرات الأزرار أو تحديثات المستشعرات المباشرة.
تحقق قبل الاستماع
ألست متأكدًا من النوع الذي لديك؟ تخبرك الخاصية isBroadcast بذلك، وبذلك يمكنك تجنب خطأ StateError الناتج عن الاستماع مرتين إلى streams ذات الاشتراك الواحد.
if (!stream.isBroadcast) {
// only one listener allowed
}اختبار سريع
أي stream يناسب عدة مستمعين؟
مراجعة
تخدم streams ذات الاشتراك الواحد مستمعًا واحدًا وتخزّن الأحداث مؤقتًا حتى تُقرأ، بينما تخدم broadcast streams عدة مستمعين لكنها تتجاوز الأحداث السابقة. اختر النوع بناءً على عدد المستمعين. 🎉
الأسئلة الشائعة
هل درس «Streams أحادية البث في مقابل Streams المذاعة» مجاني؟
نعم — نص درس «Streams أحادية البث في مقابل Streams المذاعة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Dart Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Dart Academy 4 دروس في المجموع.
ماذا ستتعلم في «Streams أحادية البث في مقابل Streams المذاعة»؟
اختر Stream المناسبة لعدة مستمعين تتمرن على Dart Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Dart Academy؟
لا تُشترط خبرة سابقة. Dart Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «Streams أحادية البث في مقابل Streams المذاعة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Dart Academy هذا؟
نعم. كل درس في Dart Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الاستماع باستخدام await for
- Streams أحادية البث في مقابل Streams المذاعة
- تحويل Streams: map وwhere وtake
- إنشاء Streams باستخدام async*