Sobes.tech
Junior

Flutter'da FutureBuilder nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Asenkron veriler temel alınarak arayüz oluşturmak için widget, Future tabanlıdır.

Ana parametreler:

  • future: İzlenecek Future örneği.
  • initialData: future tamamlanmadan önce gösterilen veriler.
  • builder: (AsyncWidgetBuilder) her future durumu değiştiğinde çağrılan ve BuildContext ile AsyncSnapshot alan fonksiyon.

AsyncSnapshot durumları:

  • ConnectionState.none: Future henüz başlamadı.
  • ConnectionState.waiting: Future çalışıyor.
  • ConnectionState.active: (Nadir) Future ara veriler döndürdü.
  • ConnectionState.done: Future tamamlandı (başarılı veya hata ile).

Kullanım örneği:

// Diyelim ki, bize `Future<String>` döndüren bir fonksiyonumuz var
Future<String> fetchData() async {
  await Future.delayed(Duration(seconds: 2)); // Ağ isteği simülasyonu
  return "Veriler yüklendi!";
}

// ... widget'in build metodunda:
@override
Widget build(BuildContext context) {
  return FutureBuilder<String>(
    future: fetchData(), // Future'umuz
    builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
      if (snapshot.connectionState == ConnectionState.waiting) {
        // Future çalışırken yükleme göstergesi göster
        return CircularProgressIndicator();
      } else if (snapshot.hasError) {
        // Future hata ile biterse hata mesajı göster
        return Text('Hata: ${snapshot.error}');
      } else {
        // Future başarıyla tamamlandıysa verileri göster
        return Text('Sonuç: ${snapshot.data}');
      }
    },
  );
}

Avantajlar:

  • UI'da asenkron işlemlerle çalışma kolaylığı sağlar.
  • Future durum değiştikçe UI otomatik olarak yeniden çizilir.
  • Veri yükleme mantığı ve UI oluşturma mantığını net ayırır.

Dezavantajlar:

  • build metodunda oluşturulan Future nedeniyle gereksiz yeniden çizimlere yol açabilir. Future'u bir kez oluşturmak (örneğin, initState içinde) önerilir.