مؤشر دائري أثناء التحميل
جزء من قسم البيانات والشبكة في رحلة Flutter على Coddy. الدرس 5 من 27.
ثانيتان وقت طويل للتحديق في شاشة لا تتحرك. تخبر الدائرة الدوّارة الشخص بأن التطبيق يعمل على الأمر. في Flutter، تُسمّى CircularProgressIndicator.
const CircularProgressIndicator()لا تحتاج إلى أي شيء كي تعمل: ضعها على الشاشة وستدور. تتمثل مهمتها في إظهارها فقط أثناء وصول البيانات. يتيح لك bool في الحالة فعل ذلك:
bool loading = false;
// قبل await: loading = true
// بعد await: loading = false
loading ? const CircularProgressIndicator() : Text(message)عيّن loading إلى true داخل setState قبل استخدام await، ثم أعده إلى false داخل setState الذي يعرض الإجابة.
التحدي
سهلاستبدل النص Loading... بمؤشر تحميل دوّار:
- أضف
bool loading = false;إلى الحالة - اجعله
trueقبلfetchوأعده إلىfalseعند وصول الرسالة - عندما تكون
loadingبقيمة true، اعرضCircularProgressIndicatorبدلًا من الرسالة
جرّب بنفسك
import 'package:flutter/material.dart';
import 'api.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
debugShowCheckedModeBanner: false,
home: MessageScreen(),
);
}
}
class MessageScreen extends StatefulWidget {
const MessageScreen({super.key});
@override
State<MessageScreen> createState() => _MessageScreenState();
}
class _MessageScreenState extends State<MessageScreen> {
String message = 'No message yet';
Future<void> loadMessage() async {
setState(() {
message = 'Loading...';
});
final text = await fetch('/message');
setState(() {
message = text;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(message, style: const TextStyle(fontSize: 24)),
const SizedBox(height: 24),
ElevatedButton(onPressed: loadMessage, child: const Text('Load message')),
],
),
),
);
}
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البيانات والشبكة
2شاشات التحميل
مؤشر دائري أثناء التحميلتعرّف على FutureBuilderجلب البيانات مرة واحدة في initStateإعادة تحميل البيانات بزرالسحب للتحديثتدرّب بنفسك: مترجم Flutter عبر الإنترنت