dio ile REST Üzerinden Fiyat Çekme
İlk açılışta güncel fiyatı hızlıca göstermek için tek seferlik bir REST isteği idealdir. pubspec.yaml dosyanıza dio paketini ekledikten sonra, API anahtarınızı varsayılan başlıklara tanımlayarak her isteğe otomatik iliştirebilirsiniz: `final dio = Dio(BaseOptions(headers: {'Authorization': 'Bearer $apiKey'}));`. Ardından `final res = await dio.get('https://api.hasfiyat.com/api/prices', queryParameters: {'source': 'harem'});` çağrısıyla yanıtı alır, `res.data['data']` listesinde title değeri HAS ALTIN olan kalemden has altın alış (buy) ve satış (sell) değerlerini okursunuz.
dio'nun yanıtı otomatik olarak Map yapısına çözmesi, JSON ayrıştırmayı kolaylaştırır. Yine de tip güvenliği için gelen veriyi bir model sınıfına (örneğin Fiyat.fromJson) dönüştürmek en iyi pratiktir; böylece alanlara nokta gösterimiyle güvenle erişir ve olası null değerleri tek yerde yönetirsiniz.
Zaman aşımı, yeniden deneme ve merkezî hata yönetimi için dio'nun Interceptor mekanizması çok kullanışlıdır. Bir interceptor içinde 401 yanıtlarını yakalayıp anahtar sorununu loglayabilir, bağlantı hatalarında kullanıcıya sade bir uyarı gösterebilirsiniz. Bu katman, uygulamanın farklı ekranlarında ağ mantığını tekrarlamanızı önler.
web_socket_channel ile Canlı WebSocket Akışı
Fiyatların anlık değişimini kullanıcıya yansıtmak için WebSocket bağlantısı REST sorgularından çok daha verimlidir; sürekli sorgu (polling) yapmak yerine sunucu değişiklik oldukça size veri gönderir. web_socket_channel paketiyle bağlantıyı `final kanal = WebSocketChannel.connect(Uri.parse('wss://api.hasfiyat.com/stream?source=harem&token=$apiKey'));` şeklinde kurarsınız.
Bağlantı kurulduktan sonra gelen mesajları dinlersiniz: `kanal.stream.listen((mesaj) { final veri = jsonDecode(mesaj); /* ekranı güncelle */ });`. Her mesaj seçtiğiniz kaynağın güncel kalem listesini taşır; durumu (state) tazeleyerek arayüzü yenilersiniz. Canlı akış sayesinde gram altın, çeyrek, ons XAU veya USD/TRY paritesi gibi değerler kullanıcı ekranında adeta canlı bir pano gibi akar.
Mobil uygulamalarda bağlantının uygulama arka plana alındığında kesilip öne geldiğinde yeniden kurulması gerekir. kanal.stream.listen içindeki onDone ve onError geri çağrılarında bağlantının kapandığını yakalayıp kısa bir beklemeyle yeniden bağlanarak bu yaşam döngüsünü yönetin. AppLifecycleState değişimlerini takip edip soketi uygun anda açıp kapatmak, hem pil tüketimini azaltır hem de gereksiz veri trafiğini önler.
Durum Yönetimi ve Üretim İpuçları
Canlı akışı arayüze bağlamak için Provider, Riverpod veya Bloc gibi bir durum yönetimi çözümü kullanmanızı öneririz. Soketten gelen her güncellemeyi bir Stream veya notifier üzerinden yayınlar, widget ağacında yalnızca fiyatı gösteren küçük parçaları yeniden çizersiniz. Böylece tüm ekranı değil, yalnızca değişen bileşeni güncelleyerek akıcı bir deneyim sağlarsınız.
API anahtarınızı asla doğrudan Dart kaynak koduna gömmeyin; derleme sırasında --dart-define ile enjekte edin veya güvenli bir depolama katmanından okuyun. Yayınlanan mobil paketler tersine mühendislikle açılabildiğinden, mümkünse yetkilendirmeyi kendi backend'iniz üzerinden proxy'leyerek anahtarı istemciden tamamen uzak tutmak en güvenli yaklaşımdır.
Hasfiyat, Flutter ekipleri için hem REST hem de WebSocket arayüzünü tek bir API anahtarıyla sunar. 67'den fazla sembol, çok kaynaklı otomatik failover ve canlı akışla mobil uygulamanız ilk ekrandan itibaren güvenilir ve güncel altın ile döviz verisi gösterir.
Sık sorulan sorular
Flutter uygulamasında Hasfiyat altın fiyatını nasıl gösteririm?
Dart'ın http paketiyle Authorization header ekleyerek GET isteği atar, dönen JSON'u jsonDecode ile Map'e çevirirsiniz. Alış-satış değerlerini bir FutureBuilder içinde widget'a bağlayarak ekranda gösterirsiniz. Canlı güncelleme için WebSocket istemcisiyle StreamBuilder kullanabilirsiniz.
Dart'ta API anahtarını isteğe nasıl eklerim?
http.get(url, headers: {'Authorization': apiKey}) şeklinde headers parametresine anahtarınızı yazarsınız. Anahtarı koda gömmek yerine güvenli depolama ya da ortam değişkeninden okumanız önerilir. Eksik anahtarda API 401 döner.
Flutter'da canlı altın fiyatı akışını StreamBuilder ile nasıl bağlarım?
web_socket_channel paketiyle bağlantı kurup kanal.stream akışını doğrudan kullanırsınız. StreamBuilder bu Stream'i dinleyerek her yeni fiyatta widget'ı otomatik yeniler. Böylece kullanıcı düşük gecikmeyle güncel değeri görür.
Dart'ta JSON altın yanıtını model sınıfına nasıl dönüştürürüm?
jsonDecode ile Map elde edip fromJson adında bir factory constructor'a geçirerek model nesnesi oluşturursunuz. Bu yaklaşım alan erişimini tip güvenli hale getirir. json_serializable paketiyle bu dönüşüm kodunu otomatik de üretebilirsiniz.
Flutter uygulamamda döviz kuru API isteği başarısız olursa nasıl ele alırım?
http isteğini try-catch içine alıp statusCode değerini kontrol ederek 200 dışındaki durumları yönetirsiniz. Kullanıcıya hata mesajı gösterip yeniden deneme butonu sunabilirsiniz. Çoklu-kaynak failover sayesinde geçici kaynak sorunları API tarafında çoğunlukla otomatik giderilir.
Dart'ta http paketi yerine Dio kullanabilir miyim?
Evet, Dio ile options.headers üzerinden Authorization anahtarını ekleyerek istek atabilir, interceptor'larla hata ve yeniden deneme mantığını merkezileştirebilirsiniz. Dio, timeout ve iptal token'ı gibi gelişmiş özellikler sunar. Küçük uygulamalarda standart http paketi de yeterlidir.
Flutter'da 67 sembol arasından sadece ceyrek ve gram altını nasıl çekerim?
Çoklu sembol destekleyen uç noktaya çeyrek altın ve gram altın sembollerini iletip dönen JSON dizisini filtreleyerek gösterirsiniz. Tek istekte ihtiyaç duyduğunuz sembolleri alarak veri trafiğini azaltırsınız. Alış ve satış değerleri her sembol için ayrı gelir.
Canlı altın & döviz verisine hemen bağlanın
Dakikalar içinde REST veya WebSocket ile gerçek zamanlı fiyat akışına başlayın.

