CodeBlanks Logo Icon CodeBlanks

loading ve error

ConnectionState.waiting ve hasError ile durum yönetimini öğrenirsin.

loading ve error

FutureBuilder'da iki durum yaygındır: ConnectionState.waiting iken yükleniyor göstergesi, snapshot.hasError iken hata mesajı gösterilir.

if (snapshot.connectionState == ConnectionState.waiting) {
  return CircularProgressIndicator();
} else if (snapshot.hasError) {
  return Text('Hata: ${snapshot.error}');
}

Bu iki kontrol ile kullanıcı deneyimi düzeltilir.

hasError ile hata yönetimi

snapshot.hasError, Future bir hata fırlattığında true olur. Bu durumda snapshot.error ile hatayı gösterirsin.

if (snapshot.hasError) {
  return Text('Hata: ${snapshot.error}');
}

Hata yakalanmazsa uygulama çökebilir.

Uygulama Yükleniyor, hata ve veri durumlarını yönet

veriGetir async metodu 100 ms bekleyip 'Hazır' döndürsün. FutureBuilder<String> içinde: waiting iken CircularProgressIndicator, hasError iken Text('hata'), değilse Text(snapshot.data!) göster. main içinde print('başladı') çağır.

Başlangıç kodu

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

Future<String> veriGetir() async {
  await Future.delayed(Duration(milliseconds: 100));
  return 'Hazır';
}

void main() {
  print('başladı');
  runApp(MaterialApp(home: Ekrani()));
}

class Ekrani extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        // FutureBuilder: waiting, hasError, data durumlarını yönet
        child: Text('bekle'),
      ),
    );
  }
}

Örnek çözüm

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

Future<String> veriGetir() async {
  await Future.delayed(Duration(milliseconds: 100));
  return 'Hazır';
}

void main() {
  print('başladı');
  runApp(MaterialApp(home: Ekrani()));
}

class Ekrani extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: FutureBuilder<String>(
          future: veriGetir(),
          builder: (context, snapshot) {
            if (snapshot.connectionState == ConnectionState.waiting) {
              return CircularProgressIndicator();
            } else if (snapshot.hasError) {
              return Text('hata');
            }
            return Text(snapshot.data!);
          },
        ),
      ),
    );
  }
}

Beklenen çıktı

başladı

Soru ve cevaplar

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

1 FutureBuilder'da yükleniyor durumunda hangi gösterge kullanılır?

  • Scaffold
  • Text
  • CircularProgressIndicator Doğru cevap
  • AppBar

Açıklama: ConnectionState.waiting durumunda CircularProgressIndicator gibi bir yükleniyor göstergesi gösterilir.

2 Yükleniyor göstergesini ekle

Soru
if (snapshot.connectionState == ConnectionState.waiting) {
  return ____();
}
Cevap
if (snapshot.connectionState == ConnectionState.waiting) {
  return CircularProgressIndicator();
}

Açıklama: ConnectionState.waiting iken CircularProgressIndicator döndürülür; bu, yükleniyor durumunu görselleştirir.

3 loading ve error parçaları

Kavram Anlamı
ConnectionState.waiting Yükleniyor aşaması
hasError Future hata fırlattığında true
CircularProgressIndicator Yükleniyor göstergesi
snapshot.error Fırlatılan hata

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