Tarik untuk Memuat Ulang
Termasuk bagian Data dan Jaringan dalam perjalanan Flutter di Coddy. Pelajaran 9 dari 27.
Di ponsel, orang menarik daftar ke bawah untuk memuat ulang. Indikator pemuatan turun dari atas, lalu data diperbarui. Widget Flutter untuk ini adalah RefreshIndicator:
RefreshIndicator(
onRefresh: refresh,
child: ListView(
children: [ ... ],
),
)onRefresh adalah fungsi yang mengembalikan Future. Indikator pemuatan tetap tampil sampai future tersebut selesai, jadi gunakan await untuk menunggu data baru di dalamnya:
Future<void> refresh() async {
setState(() {
_tip = fetch('/tip');
});
await _tip;
}Tarik untuk memuat ulang hanya berfungsi pada sesuatu yang bisa digulir. Letakkan konten di dalam ListView, meskipun hanya ada satu item: ListView selalu bisa ditarik. Indikator pemuatan sudah memberi tahu bahwa aplikasi sedang bekerja, jadi builder dapat mempertahankan petunjuk lama dengan pemeriksaan hasData.
Tantangan
SedangBuat tips dimuat ulang saat kamu menarik layar ke bawah:
- tambahkan method
refreshyang menetapkan_tipbaru di dalamsetStatedan menunggunya - bungkus body dengan
RefreshIndicatoryang memilikionRefresh: refresh - letakkan
FutureBuilderdi dalamListViewdi dalamnya
Di pratinjau, tarik layar ke bawah dengan mouse.
Coba sendiri
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();
},
),
),
),
);
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Data dan Jaringan
Latihan sendiri: Compiler Flutter online