Junior
Čo je FutureBuilder vo Flutteri?
sobes.tech AI
Odpoveď od AI
Widget za konštrukciu používateľského rozhrania založeného na asynchrónnych dátach získaných z Future.
Hlavné parametre:
future: InštanciaFuture, ktorú je potrebné sledovať.initialData: Dáta, ktoré sa zobrazia pred dokončenímfuture.builder: Funkcia (AsyncWidgetBuilder), ktorá sa volá pri každej zmene stavufuturea prijímaBuildContextaAsyncSnapshot.
Stavy AsyncSnapshot:
ConnectionState.none: Future ešte nezačal.ConnectionState.waiting: Future je v priebehu.ConnectionState.active: (Zriedkavo pre Future) Future vrátil medzičasové dáta.ConnectionState.done: Future je ukončený (úspešne alebo s chybou).
Príklad použitia:
// Predpokladajme, že máme funkciu, ktorá vracia Future<String>
Future<String> fetchData() async {
await Future.delayed(Duration(seconds: 2)); // Simulácia siete
return "Dáta načítané!";
}
// ... v build metóde widgetu:
@override
Widget build(BuildContext context) {
return FutureBuilder<String>(
future: fetchData(), // Náš Future
builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
// Zobrazíme indikátor načítania, kým Future beží
return CircularProgressIndicator();
} else if (snapshot.hasError) {
// Zobrazíme chybové hlásenie, ak Future skončí s chybou
return Text('Chyba: ${snapshot.error}');
} else {
// Zobrazíme dáta, ak Future úspešne skončí
return Text('Výsledok: ${snapshot.data}');
}
},
);
}
Výhody:
- Uľahčuje prácu s asynchrónnymi operáciami v UI.
- Automaticky rekonštruuje UI pri zmene stavu
Future. - Jasne oddeľuje logiku načítania dát od logiky konštrukcie UI.
Nevýhody:
- Môže spôsobovať zbytočné opätovné vykreslenia, ak sa
Futurevytvára vnútri metódybuild. Odporúča sa vytvoriťFutureraz (napríklad vinitState).