تخطَّ إلى المحتوى

StreamBuilder

عرض تدفّق بيانات مستمر StreamBuilder

StreamBuilder مثل FutureBuilder لكن لتدفّق بيانات مستمر يصدر أكثر من قيمة بمرور الوقت — بيانات حيّة من Firestore أو WebSocket.

يعيد بناء الواجهة تلقائيًا كل مرة يصدر فيها الـ Stream قيمة جديدة، بلا حاجة لـ setState يدوي أو الاشتراك/إلغاء الاشتراك بنفسك.

الصياغة

StreamBuilder<T>(
  stream: Stream<T>,
  builder: (context, AsyncSnapshot<T> snapshot) => Widget,
)

📄 مثال

StreamBuilder<int>(
  stream: counterStream(),
  builder: (context, snapshot) {
    if (!snapshot.hasData) {
      return const CircularProgressIndicator();
    }
    return Text('العدّاد: ${snapshot.data}');
  },
)

أهم المعاملات

المعاملالوظيفة
streamتدفّق البيانات الذي تُبنى الواجهة حسب آخر قيمة صادرة منه
builderدالة تُستدعى تلقائيًا بكل قيمة جديدة يصدرها الـ Stream
initialDataقيمة تُعرض قبل وصول أول قيمة فعلية من الـ Stream (اختياري)

💡 نصائح عملية

  • استخدمه مع Streams من Firestore (snapshots()) لعرض بيانات تتحدّث لحظيًا بلا أي كود إضافي لإعادة الجلب

⚠️ أخطاء شائعة

  • إضافة StreamSubscription يدوي فوقه — StreamBuilder يتولّى الاشتراك وإلغاءه تلقائيًا بنفسه، الازدواجية تكرار غير ضروري وقد يسبب تسريبًا

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار FLUTTER الكامل بالعربي.