משיכה לרענון
חלק מהיחידה נתונים ורשת במסלול ה-Flutter של Coddy. שיעור 9 מתוך 27.
בטלפון, אנשים מושכים רשימה כלפי מטה כדי לטעון אותה מחדש. סמן טעינה מסתובב מופיע מלמעלה, והנתונים מתעדכנים. הרכיב של Flutter שמיועד לכך הוא RefreshIndicator:
RefreshIndicator(
onRefresh: refresh,
child: ListView(
children: [ ... ],
),
)onRefresh היא פונקציה שמחזירה Future. סמן הטעינה שמופיע במשיכה נשאר עד שהעתיד הזה מסתיים, לכן יש להשתמש ב-await כדי להמתין לנתונים החדשים בתוכה:
Future<void> refresh() async {
setState(() {
_tip = fetch('/tip');
});
await _tip;
}המשיכה פועלת רק על רכיב שאפשר לגלול. יש לשים את התוכן בתוך ListView, גם כשיש בו רק פריט אחד: תמיד אפשר למשוך ListView. סמן הטעינה שמופיע במשיכה כבר מציין שהאפליקציה פועלת, ולכן הבונה יכול להשאיר את הרמז הקודם באמצעות בדיקת hasData.
אתגר
בינוניגרום לטיפ להיטען מחדש כשמושכים את המסך כלפי מטה:
- הוסף שיטת
refreshשמגדירה_tipחדש בתוךsetStateוממתינה לו - עטוף את גוף המסך ב-
RefreshIndicatorעםonRefresh: refresh - שים בתוכו את
FutureBuilderבתוךListView
בתצוגה המקדימה, גרור את המסך כלפי מטה בעזרת העכבר.
נסו בעצמכם
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: TipScreen(),
);
}
}
class TipScreen extends StatefulWidget {
const TipScreen({super.key});
@override
State<TipScreen> createState() => _TipScreenState();
}
class _TipScreenState extends State<TipScreen> {
late Future<String> _tip;
@override
void initState() {
super.initState();
_tip = fetch('/tip');
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Tip of the Day'),
),
body: Center(
child: Padding(
padding: const EdgeInsets.all(24),
child: FutureBuilder<String>(
future: _tip,
builder: (context, snapshot) {
if (snapshot.hasData) {
return Text(
snapshot.data!,
textAlign: TextAlign.center,
style: const TextStyle(fontSize: 24),
);
}
return const CircularProgressIndicator();
},
),
),
),
);
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה נתונים ורשת
תרגלו בעצמכם: קומפיילר Flutter אונליין