CodeBlanks Logo Icon CodeBlanks

AsyncSnapshot

AsyncSnapshot bağlantı durumlarını öğrenirsin.

AsyncSnapshot

AsyncSnapshot, Future'ın o anki durumunu taşır. ConnectionState ile bağlantı aşamasını, data ile sonucu, error ile hatayı verir.

snapshot.connectionState
snapshot.data
snapshot.error

builder içinde bu bilgilere göre farklı widget'lar gösterilir.

ConnectionState değerleri

ConnectionState dört değer alır: none (henüz başlamadı), waiting (bekliyor), active (stream aktif), done (tamamlandı). FutureBuilder için en sık kullanılanlar waiting ve done'dur.

if (snapshot.connectionState == ConnectionState.done) {
  return Text(snapshot.data!);
}

done, sonucun hazır olduğunu belirtir.

Uygulama ConnectionState.done ile sonucu göster

veriGetir async metodu 100 ms bekleyip 'Tamamlandı' döndürsün. FutureBuilder<String> içinde snapshot.connectionState == ConnectionState.done ise sonucu, değilse 'bekle' metnini 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 'Tamamlandı';
}

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

class Ekrani extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        // FutureBuilder ile durum kontrolü yap
        child: Text('bekle'),
      ),
    );
  }
}

Örnek çözüm

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

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

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.done) {
              return Text(snapshot.data!);
            }
            return Text('bekle');
          },
        ),
      ),
    );
  }
}

Beklenen çıktı

başladı

Soru ve cevaplar

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

1 AsyncSnapshot'ın bağlantı durumunu hangi özellik verir?

  • snapshot.error
  • snapshot.builder
  • snapshot.data
  • snapshot.connectionState Doğru cevap

Açıklama: AsyncSnapshot'ın connectionState özelliği bağlantı aşamasını (none, waiting, active, done) verir.

2 ConnectionState kontrolü ekle

Soru
if (snapshot.connectionState == ConnectionState.____) {
  return Text(snapshot.data!);
}
Cevap
if (snapshot.connectionState == ConnectionState.done) {
  return Text(snapshot.data!);
}

Açıklama: ConnectionState.done, Future tamamlandığında gerçekleşir; bu aşamada snapshot.data sonucu taşır.

3 AsyncSnapshot parçaları

Kavram Anlamı
AsyncSnapshot Future'ın o anki durumunu taşır
ConnectionState Bağlantı aşamasını verir
data Future'ın sonucu
error Future fırlatırsa hatası

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