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

FutureBuilder

عرض نتيجة Future تلقائيًا FutureBuilder

FutureBuilder يبني الواجهة تلقائيًا حسب حالة Future — انتظار، نجاح، أو خطأ — بلا حاجة لإدارة الحالة يدويًا.

يأخذ future ودالة builder تُستدعى كل مرة تتغيّر فيها حالة الـ AsyncSnapshot. غالبًا يُستخدم لعرض بيانات قادمة من الشبكة أو قاعدة بيانات محلية عند فتح الشاشة أول مرة.

الصياغة

FutureBuilder<T>(
  future: Future<T>,
  builder: (context, AsyncSnapshot<T> snapshot) => Widget,
)

📄 مثال

FutureBuilder<List<String>>(
  future: fetchNames(),
  builder: (context, snapshot) {
    if (snapshot.connectionState == ConnectionState.waiting) {
      return const CircularProgressIndicator();
    }
    if (snapshot.hasError) {
      return Text('خطأ: ${snapshot.error}');
    }
    final names = snapshot.data!;
    return ListView(
      children: names.map((n) => Text(n)).toList(),
    );
  },
)

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

المعاملالوظيفة
futureالـ Future الذي تُبنى الواجهة حسب حالته
builderدالة تُستدعى بكل تغيّر بحالة الـ snapshot (انتظار/نجاح/خطأ)
snapshot.connectionStateحالة الاتصال الحالية — waiting قبل اكتمال Future
snapshot.hasError / snapshot.dataالتحقق من نجاح أو فشل النتيجة

💡 نصائح عملية

  • مرّر future من متغيّر محفوظ بـ initState أو خارج build() — استدعاؤه مباشرة داخل معامل future بـ build() يعيد تنفيذه بكل إعادة رسم

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

  • استدعاء دالة async مباشرة داخل معامل future بمكانها بـ build() — يُنفَّذ الطلب من جديد بكل إعادة بناء للويدجت، تكرار غير مقصود لطلبات الشبكة

خصائص ذات صلة

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