Sobes.tech
Junior

Ce este FutureBuilder în Flutter?

sobes.tech AI

Răspuns de la AI

Widget pentru construirea interfeței bazate pe date asincrone obținute din Future.

Parametri principali:

  • future: O instanță de Future care trebuie urmărită.
  • initialData: Datele afișate înainte ca future să se finalizeze.
  • builder: Funcție (AsyncWidgetBuilder) care este apelată la fiecare schimbare de stare a future și primește BuildContext și AsyncSnapshot.

Stările AsyncSnapshot:

  • ConnectionState.none: Future-ul nu a început încă.
  • ConnectionState.waiting: Future-ul este în curs de execuție.
  • ConnectionState.active: (Rareori pentru Future) Future-ul a returnat date intermediare.
  • ConnectionState.done: Future-ul s-a încheiat (cu succes sau cu eroare).

Exemplu de utilizare:

// Să presupunem că avem o funcție care returnează un Future<String>
Future<String> fetchData() async {
  await Future.delayed(Duration(seconds: 2)); // Simulare de solicitare de rețea
  return "Date încărcate!";
}

// ... în metoda build a widget-ului:
@override
Widget build(BuildContext context) {
  return FutureBuilder<String>(
    future: fetchData(), // Future-ul nostru
    builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
      if (snapshot.connectionState == ConnectionState.waiting) {
        // Afișăm un indicator de încărcare în timp ce Future-ul rulează
        return CircularProgressIndicator();
      } else if (snapshot.hasError) {
        // Afișăm mesajul de eroare dacă Future-ul s-a încheiat cu eroare
        return Text('Eroare: ${snapshot.error}');
      } else {
        // Afișăm datele dacă Future-ul s-a încheiat cu succes
        return Text('Rezultat: ${snapshot.data}');
      }
    },
  );
}

Avantaje:

  • Facilitează gestionarea operațiilor asincrone în UI.
  • Reconstruiește automat UI-ul la schimbarea stării Future-ului.
  • Separă clar logica de încărcare a datelor de logica de construire a UI-ului.

Dezavantaje:

  • Poate duce la re-construcții inutile dacă Future este creat în interiorul metodei build. Se recomandă crearea Future-ului o singură dată (de exemplu, în initState).