Yazılım ve teknoloji konusunda özel içeriklerle dolu videolarımızı kaçırma!

Abone Ol
flutter geolocator

Flutter'da Kullanıcının Mevcut Konumunu Bulma (GeoLocator Paketi)

Kullanıcı konumunu bulma, mobil geliştirme dünyasında çok önemli bir yere sahiptir. En popüler uygulamalara bakarsanız, hepsi kullanıcının konum hizmetlerini kullanarak öneri, reklamlandırma ve işlevsellik sağlamakta.

 

Bu yazımızda GeoLocator ve GeoCoding paketlerini kullanarak kullanıcının konumunu, şehrini veya adresini bulacağız.

 

 

GeoLocator ve GeoCoding Paketlerinin Kurulumu

Öncelikle paketleri projemize dahil etmeliyiz. Aşağıdaki komutları çalıştırarak projenize ekleyebilirsiniz.

 

flutter pub add geolocator
flutter pub add geocoding

 

Şimdi ise Android ve IOS için gerekli konfigürasyonları yapmalıyız.

 

Android için GeoLocator Paketini Ayarlama

Öncekikle gradle.properties dosyasında aşağıdaki ayarların olduğundan emin olun.

 

android.useAndroidX=true
android.enableJetifier=true

 

Daha sonra android/app/build.gradle dosyasına ulaşarak compileSdkVersion 'un 33 olduğundan emin olun.

 

Son olarak kullanıcının konumuna erişeceğimiz için konum erişimini belirtmeliyiz.

Bunun için android/app/src/main/AndroidManifest.xml dosyasına ulaşıp <application üzerine aşağıdaki izinleri eklemeliyiz.

 

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

 

İlk izin, kullanıcının kesin konumunu almak içindir. Alttaki iste yaklaşık konumunu elde etmek içindir.

İhtiyacınıza göre ekleyebilirsiniz.

 

Eğer arkaplanda konumu takip etmeniz gerekiyorsa ek olarak şu izni de eklemelisiniz.

<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

 

 

IOS için GeoLocator Paketini Ayarlama

İlk olarak ios/runner/Info.plist dosyasına ulaşıp aşağıdaki izinleri ekleyelim.

 

<key>NSLocationWhenInUseUsageDescription</key>
<string>This app needs access to location when open.</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>This app needs access to location when in the background.</string>

 

Eğer arkaplanda konum takibi de yapmak istiyorsanız Background Modes özelliğini aktifleştirmeniz gerekir.

Project > Signing and Capabilities > "+ Capability" yoluna giderek  Location Updates 'i seçmelisiniz.

 

Bu konuda dikkatli olmalısınız. Uygulamanızı AppStore'a gönderirken neden buna ihtiyaç duyduğunu detaylı olarak açıklamanız gerekecektir. Eğer tatmin edici bir açıklama yapmazsanız uygulamanız reddedilebilir.

 

requestTemporaryFullAccuracy({purposeKey: "YourPurposeKey"}) metodunu kullanırken ek olarak Info.plist dosyasına aşağıdakileri eklemelisiniz.

 

<key>NSLocationTemporaryUsageDescriptionDictionary</key>
<dict>
  <key>YourPurposeKey</key>
  <string>The example App requires temporary access to the device&apos;s precise location.</string>
</dict>

 

İkinci anahtar (bu örnekte YourPurposeKey olarak adlandırılmış) requestTemporaryFullAccuracy() yöntemine iletilen purposeKey ile eşleşmelidir. Uygulamanızdaki farklı özellikler için birden çok anahtar tanımlamak mümkündür. 

 

NOT: Erişim izni istenirken ilk kez pop-up'ın görünmesi birkaç saniye sürebilir. Bu, iOS'un tam kullanıcı konumunu belirleme sürecinden kaynaklanan bir durumdur ve maalesef elimizde olan birşey değildir.

 

Konum Erişimi için Kullanıcıdan İzin İsteme

Kullanıcının konum bilgilerine erişebilmek için cihazın konumu açık olmalı, bunu kontrol edip konum iznini istemeliyiz.

 

İlk olarak kullanıcının konum erişimi açık mı kontrol edelim.

final bool serviceEnabled = await Geolocator.isLocationServiceEnabled();

Eğer konum erişimi açık değilse bir uyarı gösterebilirsiniz.

 

Şimdi de kullanıcıdan konum izni isteyelim. Eğer izin vermediyse bir kez daha isteyip tekrarında hata döndürebiliriz.

 LocationPermission permission = await Geolocator.checkPermission();
    if (permission == LocationPermission.denied) {
      permission = await Geolocator.requestPermission();
      if (permission == LocationPermission.denied) {
        // Hata döndür
      }

 

Evet konum iznimizi de aldığımıza göre artık kullanıcının mevcut konum pozisyonuna (enlem, boylam) ulaşabiliriz.

 

final Position position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);

 

Buradaki desiredAccuracy değeri eğer high olarak seçilirse kesin konumu elde eder. Yaklaşık konum için low değerini deneyebilirsiniz.

 

Elde ettiğimiz position değişkeninde latitude ve longtitude değerleri var. Yani enlem ve boylam değerleri.

Şimdi bu değerleri kullanarak ve ek olarak geocoding paketini kullanarak bu bilgileri net bir konuma dönüştürelim.

 

GeoCoding Paketinin Kullanımı

Aslında kullanımı oldukça kolay. Tek yapmamız gereken aldığımız enlem ve boylam değerlerini paket içindeki placemarkFromCoordinates fonksiyonuna iletmek.

 

 final List<Placemark> placemark = await placemarkFromCoordinates(position.latitude, position.longitude);

 

Elimizdeki placemark listesi, kullanıcının konum bilgisini bize liste olarak iletiyor. Listenin ilk elemanı bizim işimizi görecektir.

 

 final String? city = placemark[0].locality;

 

Burada örnek olarak şehir değeri alındı. İsterseniz listenin ilk elemanını print metoduyla yazdırarak tüm adres bilgilerine erişebilirsiniz.

 

Umarım faydalı olmuştur. Canlı bir proje üzerinde bu konuyu incelemek isterseniz GitHub bağlantısı bırakıyorum.

https://github.com/ruwiss/flutter_dersleri

 

Ayrıca videolu anlatım için aşağıdaki linki ziyaret edebilirsiniz.

YouTube Ders Linki

flutter yazılım kodlama