Sobes.tech
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štancia Future, ktorú je potrebné sledovať.
  • initialData: Dáta, ktoré sa zobrazia pred dokončením future.
  • builder: Funkcia (AsyncWidgetBuilder), ktorá sa volá pri každej zmene stavu future a prijíma BuildContext a AsyncSnapshot.

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 Future vytvára vnútri metódy build. Odporúča sa vytvoriť Future raz (napríklad v initState).