Menu
CoddyTech

Wskaźnik ładowania

Część sekcji Dane i sieć ścieżki Flutter w Coddy. Lekcja 5 z 27.

Dwie sekundy to długo, gdy patrzysz na nieruchomy ekran. Obracające się kółko informuje użytkownika, że aplikacja nad tym pracuje. W Flutterze jest to CircularProgressIndicator.

const CircularProgressIndicator()

Nie wymaga niczego, aby działać: umieść je na ekranie, a zacznie się obracać. Jego zadaniem jest wyświetlanie się tylko wtedy, gdy dane są w drodze. Służy do tego bool w Twoim stanie:

bool loading = false;

// przed await: loading = true
// po await: loading = false

loading ? const CircularProgressIndicator() : Text(message)

Ustaw loading na true w setState przed użyciem await, a następnie z powrotem na false w setState, które wyświetla odpowiedź.

challenge icon

Wyzwanie

Łatwy

Zastąp tekst Loading... wskaźnikiem ładowania:

  • dodaj bool loading = false; do stanu
  • ustaw go na true przed wywołaniem fetch, a po otrzymaniu wiadomości z powrotem na false
  • gdy loading ma wartość true, wyświetl CircularProgressIndicator zamiast wiadomości

Spróbuj swoich sił

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 iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Dane i sieć

Poćwicz samodzielnie: Kompilator Flutter online