CodeBlanks Logo Icon CodeBlanks

onLocationChanged

onLocationChanged ile sürekli konum takibini öğrenirsin.

onLocationChanged akışı

onLocationChanged, cihaz hareket ettikçe yeni konum değerleri yayan bir akıştır. Stream<LocationData> döndürür ve listen ile dinlenir. Sürekli konum takibi için getLocation yerine bu akış kullanılır.

location.onLocationChanged.listen((data) {
  print(data.latitude);
});

Aboneliği sonlandırma

listen metodu bir StreamSubscription döndürür. Sürekli dinlemeye gerek kalmadığında aboneliği subscription.cancel() ile sonlandırırsın. Aksi halde akış açık kalır ve bellek sızıntısı olur.

final sub = location.onLocationChanged.listen((data) {});
// ...
await sub.cancel();

Uygulama Konum akışını dinle

Bir Location örneği oluştur, onLocationChanged akışını listen ile dinle ve gelen enlemi yazdır. 10 milisaniye bekle.

Başlangıç kodu

main.dart
class LocationData {
  final double latitude;
  LocationData(this.latitude);
}

class Location {
  Stream<LocationData> get onLocationChanged => Stream.value(LocationData(41.0));
}

void main() async {
  // onLocationChanged akışını dinle
  // enlemi yazdır
}

Örnek çözüm

main.dart
class LocationData {
  final double latitude;
  LocationData(this.latitude);
}

class Location {
  Stream<LocationData> get onLocationChanged => Stream.value(LocationData(41.0));
}

void main() async {
  final location = Location();
  location.onLocationChanged.listen((data) {
    print(data.latitude);
  });
  await Future.delayed(Duration(milliseconds: 10));
}

Beklenen çıktı

41.0

Soru ve cevaplar

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

1 onLocationChanged ne zaman yeni değer yayar?

  • Uygulama kapanınca
  • Yalnızca butona basınca
  • Cihaz konumu değiştikçe sürekli Doğru cevap
  • Yalnızca bir kez, başlangıçta

Açıklama: onLocationChanged cihaz hareket ettikçe sürekli yeni konum değerleri yayar; tek seferlik veya butona basınca çalışmaz.

2 Akışı dinle

Soru
location.____.listen((data) {
  print(data.latitude);
});
Cevap
location.onLocationChanged.listen((data) {
  print(data.latitude);
});

Açıklama: onLocationChanged bir getter'dır ve Stream döndürür; parantez gerektirmez, doğrudan .listen ile dinlenir.

3 onLocationChanged parçaları

Kavram Anlamı
onLocationChanged Konum değişim akışı
listen Akışı dinler
StreamSubscription Abonelik nesnesi
cancel Aboneliği sonlandırır

İleri seviye bölümündeki tüm dersler