סמל טעינה מסתובב
חלק מהיחידה נתונים ורשת במסלול ה-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')),
],
),
),
);
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה נתונים ורשת
תרגלו בעצמכם: קומפיילר Flutter אונליין