CodeBlanks Logo Icon CodeBlanks

Yükleme durumu

FutureBuilder ile yükleme ve hata durumlarını gösterirsin.

FutureBuilder ile durum

FutureBuilder, bir Future'ı izleyip gelen snapshot'a göre arayüzü çizer. future parametresine Future'ı, builder parametresine ise AsyncSnapshot alan bir fonksiyon verirsin. Bekleme sırasında yükleme göstergesi, hata durumunda hata mesajı gösterirsin.

FutureBuilder<Weather>(
  future: weatherFuture,
  builder: (context, snapshot) {
    if (snapshot.hasError) {
      return Text('Hata: ${snapshot.error}');
    }
    return const CircularProgressIndicator();
  },
)

AsyncSnapshot ve bağlantı durumu

AsyncSnapshot Future'ın durumunu taşır. snapshot.connectionState ile ConnectionState.waiting kontrolü yaparak yükleme durumunu yakalayabilir, snapshot.hasData ile verinin gelip gelmediğini öğrenebilirsin.

builder: (context, snapshot) {
  if (snapshot.connectionState == ConnectionState.waiting) {
    return const CircularProgressIndicator();
  } else if (snapshot.hasError) {
    return Text('Hata: ${snapshot.error}');
  }
  return Text(snapshot.data!.sehir);
}

Uygulama FutureBuilder ile durum yönetimi

Bir FutureBuilder<Weather> döndüren build metodu yaz. Yükleme durumunda CircularProgressIndicator, hata durumunda Text('Hata'), veri geldiğinde Text(snapshot.data!.sehir) göster.

Başlangıç kodu

main.dart
import 'package:flutter/material.dart';

class Weather {
  final String sehir;
  final double sicaklik;
  Weather(this.sehir, this.sicaklik);
}

// WeatherScreen sınıfını yaz
// build metodu FutureBuilder döndürsün
// yükleme durumunda yükleme göstergesi
// hata durumunda Text('Hata')
// veri geldiğinde sehir alanını göster

void main() {
  print('hazir');
}

Örnek çözüm

main.dart
import 'package:flutter/material.dart';

class Weather {
  final String sehir;
  final double sicaklik;
  Weather(this.sehir, this.sicaklik);
}

class WeatherScreen extends StatelessWidget {
  final Future<Weather> future;
  const WeatherScreen({super.key, required this.future});

  @override
  Widget build(BuildContext context) {
    return FutureBuilder<Weather>(
      future: future,
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return const CircularProgressIndicator();
        } else if (snapshot.hasError) {
          return const Text('Hata');
        }
        return Text(snapshot.data!.sehir);
      },
    );
  }
}

void main() {
  print('hazir');
}

Beklenen çıktı

hazir

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 FutureBuilder beklenirken (loading) ne gösterilir?

  • Otomatik olarak veri
  • Boş ekran
  • Hata mesajı
  • Yükleme göstergesi (örn. CircularProgressIndicator) Doğru cevap

Açıklama: Bekleme durumunda connectionState waiting olur; bu sırada yükleme göstergesi gösterirsin. Veri henüz gelmez, boş ekran kötü deneyimdir, hata mesajı yalnızca hasError durumunda gösterilir.

2 Yükleme durumunu yakala

Soru
builder: (context, snapshot) {
  if (snapshot.connectionState == ____) {
    return const CircularProgressIndicator();
  }
  return Text(snapshot.data!.sehir);
}
Cevap
builder: (context, snapshot) {
  if (snapshot.connectionState == ConnectionState.waiting) {
    return const CircularProgressIndicator();
  }
  return Text(snapshot.data!.sehir);
}

Açıklama: Bekleme durumunu yakalamak için ConnectionState.waiting kontrol edilir. active, none ve done yükleme anını belirtmez; done tamamlandığını gösterir.

3 FutureBuilder parçaları

Kavram Anlamı
future izlenen Future
builder arayüz çizen fonksiyon
snapshot.connectionState bağlantı durumu
snapshot.hasError hata var mı

Orta seviye bölümündeki tüm dersler