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 يلغي الحاجة لإدارة حالة التحميل يدويًّا — يتعامل معها تلقائيًّا.
🎯 التالي: التخزين المحلّي.