Bir Düğmeyle Verileri Yeniden Yükleme
Coddy'nin Flutter Journey'sinin Veri ve Ağ bölümünün bir parçası. Ders 8 / 27.
Yeni verileri yüklemek için FutureBuilder'a yeni bir future ver. Ekranın bununla yeniden oluşturulması için bunu setState içinde yap:
IconButton(
icon: const Icon(Icons.refresh),
onPressed: () {
setState(() {
_tip = fetch('/tip');
});
},
)Yeni ipucu 2 saniye sonra gelir. Yüklenirken snapshot.hasData değeri true kalır: oluşturucu, yeni veriler eskilerin yerini alana kadar eski verileri tutar. hasData denetimiyle eski ipucu ekranda kalır ve uygulamanın çalıştığını gösteren hiçbir şey görünmez.
Döndürücüyü yeniden göstermek için geleceğin şu anki durumunu veren snapshot.connectionState değerini denetle. Bir future çalışırken ConnectionState.waiting, tamamlandığında ise ConnectionState.done olur:
if (snapshot.connectionState == ConnectionState.waiting) {
return const CircularProgressIndicator();
}
return Text(snapshot.data!);Tamamlandığında veriler hazırdır, bu yüzden snapshot.data! güvenlidir.
Görev
OrtaSonraki ipucunu yükleyen bir yenileme düğmesi ekle:
- üst çubuğun
actionsbölümündeIcons.refreshiçeren birIconButton - düğmeye basıldığında,
setStateiçinde_tipyeni birfetch('/tip')değeri alır - yeni ipucu yüklenirken dönen simge gösterilir:
snapshot.connectionStatedeğerini kontrol et
Kendin dene
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();
},
),
),
),
);
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Veri ve Ağ bölümündeki tüm dersler
2Yükleme Ekranları
Yüklenirken Dönen SimgeFutureBuilder ile TanışıninitState içinde Bir Kez Veri GetirmeBir Düğmeyle Verileri Yeniden YüklemeYenilemek için Aşağı Çekme3Çağrılar Başarısız Olduğunda
try ile Hataları YakalamaHata Fırlatmafinally ile TemizlemeFutureBuilder Hata DurumuYeniden Dene DüğmesiKendi başına pratik yap: Online Flutter derleyicisi