Flutter
Future yeniden çalıştırma
Future'ı yeniden çalıştırmak için key ve setState kullanmayı öğrenirsin.
Future yeniden çalıştırma
Bir FutureBuilder'ı yeniden çalıştırmak için yeni bir Future örneği vermek gerekir. setState içinde _future değişkenini yeniden atayarak FutureBuilder yeniden inşa edilir ve Future yeniden çalışır.
void yenidenDene() {
setState(() {
_future = veriGetir();
});
}
Yeni Future ataması, FutureBuilder'ı yeniden tetikler.
key ve setState
FutureBuilder'ı yeniden oluşturmak için key kullanmak da bir yoldur. ValueKey her denemede değiştiğinde widget yeniden inşa edilir. Ancak en yaygın yöntem, setState ile yeni Future atamaktır.
FutureBuilder(
key: ValueKey(_denemeSayisi),
future: _future,
builder: ...,
)
key değişince widget tamamen yeniden oluşturulur.
Uygulama Yeniden dene butonuyla Future'ı tetikle
veriGetir async metodu 100 ms bekleyip 'Yeniden yüklendi' döndürsün. Ekrani stateful widget'ında _future field'ı tut, initState'te print('ekran açıldı') çağır ve _future'a veriGetir() ata. Butona basıldığında setState ile _future'ı yeniden ata. FutureBuilder<String> ile snapshot.data ?? 'bekle' göster.
Örnek çözümü göster
import 'package:flutter/material.dart';
Future<String> veriGetir() async {
await Future.delayed(Duration(milliseconds: 100));
return 'Yeniden yüklendi';
}
class Ekrani extends StatefulWidget {
@override
_EkraniState createState() => _EkraniState();
}
class _EkraniState extends State<Ekrani> {
late Future<String> _future;
@override
void initState() {
super.initState();
print('ekran açıldı');
_future = veriGetir();
}
void yenidenDene() {
setState(() {
_future = veriGetir();
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: FutureBuilder<String>(
future: _future,
builder: (context, snapshot) {
return Text(snapshot.data ?? 'bekle');
},
),
),
floatingActionButton: FloatingActionButton(
onPressed: yenidenDene,
child: Icon(Icons.refresh),
),
);
}
}
void main() => runApp(MaterialApp(home: Ekrani()));
Kendini test et
-
FutureBuilder'ı yeniden çalıştırmanın doğru yolu nedir?
- Aynı Future referansını tekrar vermek
- setState içinde yeni bir Future atamak
- Hot reload yapmak
- Uygulamayı kapatıp açmak
Cevabı göster
setState içinde yeni bir Future atamak — setState içinde _future'a yeni bir Future örneği atamak FutureBuilder'ı yeniden tetikler ve Future yeniden çalışır.
-
setState ile Future'ı yeniden ata
void yenidenDene() {
setState(() {
_future = ____();
});
}
Cevabı göster
void yenidenDene() {
setState(() {
_future = veriGetir();
});
}
-
Future yeniden çalıştırma parçaları
- setState
- Yeniden atama yapıldığı blok
- yeni Future
- FutureBuilder'ı tetikleyen atama
- ValueKey
- Widget'ı yeniden oluşturmak için anahtar
- _future değişkeni
- Yeniden atanan state alanı
Sıradaki ders: Özet - FutureBuilder