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

📱 شرح Flutter

البرمجة غير المتزامنة

الدرس 19 من 25· ⏱ 1 دقائق قراءة

Future و async/await

Future<String> loadData() async {
  await Future.delayed(Duration(seconds: 2));
  return "البيانات جاهزة";
}

void main() async {
  final data = await loadData();
  print(data);
}

FutureBuilder — عرض الحالات تلقائيًّا

يبني الواجهة حسب حالة الـ Future (تحميل/نجاح/خطأ):

FutureBuilder<List<Post>>(
  future: fetchPosts(),
  builder: (context, snapshot) {
    if (snapshot.connectionState == ConnectionState.waiting) {
      return const CircularProgressIndicator();   // تحميل
    }
    if (snapshot.hasError) {
      return Text("خطأ: ${snapshot.error}");       // خطأ
    }
    final posts = snapshot.data!;
    return ListView(
      children: posts.map((p) => ListTile(title: Text(p.title))).toList(),
    );
  },
)

StreamBuilder

مثل FutureBuilder لكن لتدفّق بيانات مستمرّ (قاعدة بيانات حيّة، WebSocket).

💡 FutureBuilder يلغي الحاجة لإدارة حالة التحميل يدويًّا — يتعامل معها تلقائيًّا.

🎯 التالي: التخزين المحلّي.

هل كان هذا الدرس مفيدًا؟