Menu
CoddyTech
flag Ar iconالعربيةdown icon

مؤشر دائري أثناء التحميل

جزء من قسم البيانات والشبكة في رحلة 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 الذي يعرض الإجابة.

challenge icon

التحدي

سهل

استبدل النص 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')),
          ],
        ),
      ),
    );
  }
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس البيانات والشبكة

تدرّب بنفسك: مترجم Flutter عبر الإنترنت