Flutter uygulamasına Firebase nasıl eklenir
FlutterFire CLI ile Firebase projesi nasıl bağlanır, başlatma kodu nasıl yazılır, kimlik doğrulama ve Firestore kullanımında nelere dikkat edilir.
Firebase bir Flutter uygulamasına ne kazandırır
Firebase, mobil uygulamanın sunucu tarafında ihtiyaç duyduğu parçaları hazır servis olarak verir: kimlik doğrulama, bulut veritabanı (Cloud Firestore), dosya depolama, anlık bildirim, çökme raporlama ve analitik. Flutter ile birlikte kullanıldığında tek bir Dart koduyla hem Android hem iOS tarafı aynı servislere bağlanır.
Bu tercih özellikle kendi sunucusunu henüz kurmamış bir ürün ekibi ya da hızlı prototip çıkaran bir ekip için mantıklıdır. Buna karşılık veri modeliniz ilişkisel sorgulara ağırlıklıysa veya kuruma özgü sunucu zorunluluğunuz varsa Firebase'in sınırlarını baştan değerlendirmeniz gerekir.
Kurulum: araçlar ve proje yapılandırması
Firebase dokümantasyonundaki akış şu sırayı izler. Önce Firebase CLI kurulur ve firebase login komutuyla hesabınıza giriş yapılır. Ardından FlutterFire CLI kurulur:
dart pub global activate flutterfire_cli
Flutter proje klasörünüzde şu komutu çalıştırın:
flutterfire configure
Bu komut hedef platformları seçmenizi ister, Firebase tarafında uygulamaları oluşturur ve lib klasörüne firebase_options.dart dosyasını üretir. Elle plist ya da json dosyası taşımak yerine bu otomatik yapılandırma tercih edilir.
Sonra çekirdek eklentiyi ekleyin:
flutter pub add firebase_core
Dokümantasyon, eklentiyi ekledikten sonra flutterfire configure komutunu yeniden çalıştırmanızı önerir; böylece yapılandırma güncel kalır. Yeni bir Firebase servisi eklediğinizde de aynı komutu tekrarlamak iyi bir alışkanlıktır.
Uygulama başlarken Firebase'i başlatma
lib/main.dart dosyasında firebase_core paketini ve üretilen firebase_options.dart dosyasını içe aktarın. main fonksiyonunu async yapın ve çalışma sırası şöyle olsun:
WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); runApp(const MyApp());
Sıra önemlidir: önce Flutter bağlayıcısı hazırlanır, sonra Firebase başlatılır, en son uygulama çalıştırılır. initializeApp beklenmeden runApp çağrılırsa ilk ekran Firebase'e erişmeye çalıştığında hata alırsınız.
Sonrasında uygulamayı yeniden derleyip flutter run ile çalıştırın. Firebase emülatör paketiyle geliştirme yapacaksanız dokümantasyon, gerçek seçenekler yerine demo ile başlayan bir proje kimliği kullanmanın yolunu da gösterir; bu, canlı veriye dokunmadan denemek için kullanışlıdır.
Kimlik doğrulama (Firebase Auth) akışı
Çekirdek kurulum tamamlandıktan sonra kimlik doğrulama için ilgili eklenti pubspec dosyasına eklenir ve Firebase konsolunda hangi giriş yöntemlerinin açık olduğu belirlenir (e-posta ve parola, Google ile giriş gibi). Konsolda yöntem açılmadan kod çalışsa bile giriş denemeleri reddedilir; bu yaygın bir ilk gün hatasıdır.
Kodda mantık şu parçalardan oluşur: giriş ya da kayıt çağrısı ve oturum durumunu dinleyen bir akış. Oturum durumu değişimini bir akış (stream) olarak dinleyip ekranı buna göre seçmek, kullanıcı çıkış yaptığında ya da oturumu düştüğünde arayüzün kendiliğinden giriş ekranına dönmesini sağlar. Hata durumlarını (yanlış parola, kayıtlı olmayan kullanıcı, ağ hatası) kullanıcıya anlaşılır mesajla göstermek gerekir; ham hata kodunu ekrana basmayın.
Oturum bilgisini kendiniz yerelde saklamaya çalışmayın; eklenti oturumu kalıcı tutmayı üstlenir. Sizin sorumluluğunuz oturum durumuna göre doğru ekrana yönlendirmektir.
Cloud Firestore ile veri okuma ve yazma
Firestore, belge (document) ve koleksiyon (collection) yapısında çalışan bir NoSQL veritabanıdır. Önce konsolda veritabanını oluşturur ve güvenlik kurallarını tanımlarsınız; kuralları açık bırakmak, herkesin verinize erişmesi anlamına gelir.
Kodda tipik kullanım şu biçimlerde ayrılır: tek seferlik okuma, anlık dinleme ve yazma. Anlık dinleme, bir sorgunun sonuçlarını akış olarak verir; sohbet, sipariş durumu ya da liste güncellemeleri gibi ekranlar bununla kurulur. Akışı arayüze bağlarken StreamBuilder kullanmak yaygın kalıptır.
Pratik öneriler:
- Belge modelini Dart sınıfına çevirin; haritalarla uğraşmak yerine fromMap ve toMap metotları yazın.
- Veri erişimini widget'lardan ayırın; bir repository sınıfı Firestore çağrılarını saklasın. Böylece state yönetimi ve test kolaylaşır.
- Sorguları ekranın ihtiyacına göre kurun; tüm koleksiyonu çekip cihazda süzmeyin.
- Çevrimdışı davranışı bilerek test edin; uygulama bağlantı koptuğunda ne gösteriyor, bağlantı döndüğünde ne senkronize ediyor, bunu görün.
Bir hata ayıklama ipucu: başlatma hatası aldığınızda önce konsol çıktısındaki ilk hata satırını okuyun. Çoğu zaman eksik bir yapılandırma dosyasını, yanlış seçilmiş platformu ya da henüz eklenmemiş bir eklentiyi doğrudan işaret eder. Sorunu çözdükten sonra uygulamayı sıfırdan derleyip hem Android hem iOS tarafında açmayı deneyin; bir platformda çalışıp diğerinde çökmesi, yapılandırmanın yalnız birine uygulandığını gösterir.
Sık karşılaşılan hatalar ve çözümleri
En sık görülen sorun, firebase_options.dart dosyasının eksik ya da eski kalmasıdır. Yeni bir platform ekledikten sonra flutterfire configure yeniden çalıştırılmadıysa o platformda başlatma hatası alırsınız. İkinci sık hata, WidgetsFlutterBinding.ensureInitialized çağrısını atlamaktır.
Bir diğer sorun, güvenlik kurallarının geliştirme sırasında gevşek bırakılıp yayına öyle çıkmasıdır. Kuralları kullanıcı kimliğine bağlayın ve yayından önce test edin. Son olarak, Firebase'e tüm iş mantığını yüklemek de sorun yaratır: fiyatlandırma hesabı, yetki kararı gibi kritik kurallar istemcide değil sunucu tarafında tutulmalıdır.
Proje ortamlarını (geliştirme, test, canlı) ayrı Firebase projeleriyle yürütmek, test verisinin canlı veriye karışmasını önler.
Mindset programlarında nerede çalışılır
Flutter ile Mobil Geliştirme programının Ağ, Veri Kalıcılığı ve Firebase modülü bu konuyu ele alır; State Yönetimi modülü ise Firebase'den gelen verinin uygulama içinde nasıl taşınacağını tamamlar. Program, Flutter'a geçen mobil geliştiriciler ve Dart bilgisini ürün geliştirmeye taşımak isteyen yazılım ekipleri için uygundur.
Kurumsal ekiplerde bu modül, ortak bir bağlantı ve veri erişim düzeninin (yapılandırma, kimlik doğrulama, repository katmanı) tüm uygulamalarda aynı kurulmasına yardımcı olur.
İlgili Mindset programı
Flutter ile Mobil Geliştirme
Sık sorulan sorular
Flutter'a Firebase eklemek için hangi komutlar gerekir?
Firebase CLI kurup firebase login ile giriş yaparsınız, sonra dart pub global activate flutterfire_cli ile FlutterFire CLI'ı kurarsınız. Proje klasöründe flutterfire configure çalıştırıp flutter pub add firebase_core ile çekirdek eklentiyi eklersiniz. Eklentiyi ekledikten sonra yapılandırma komutunu yeniden çalıştırmak önerilir.
firebase_options.dart dosyası ne işe yarar?
flutterfire configure tarafından üretilir ve seçtiğiniz platformlar için Firebase proje bilgilerini barındırır. Firebase.initializeApp çağrısında options: DefaultFirebaseOptions.currentPlatform olarak verilir. Böylece platforma özgü yapılandırma dosyalarını elle taşımanız gerekmez. Dosyayı elle düzenlemeyin; yeni bir platform eklediğinizde ya da proje değiştiğinde flutterfire configure komutunu yeniden çalıştırıp dosyayı yenileyin.
Firebase başlatılırken neden WidgetsFlutterBinding.ensureInitialized gerekir?
main fonksiyonu async olduğunda ve runApp çağrılmadan önce platform kanallarına erişildiğinde Flutter bağlayıcısının hazır olması gerekir. Bu çağrı yapılmazsa Firebase başlatma aşamasında hata alırsınız. Doğru sıra bağlayıcı, Firebase başlatma, runApp şeklindedir.
Firestore mu yoksa kendi sunucum mu tercih edilmeli?
Hızlı prototip, gerçek zamanlı güncelleme ve küçük ekip için Firestore uygun bir başlangıçtır. Karmaşık ilişkisel sorgular, kuruma özgü uyumluluk gereksinimleri ya da mevcut bir sunucu mimarisi varsa kendi API'nizi değerlendirmek daha doğru olabilir. Karar veri modeli ve ekip yetkinliğine göre verilir.
Geliştirme sırasında canlı verime zarar vermeden nasıl deneme yapabilirim?
Ayrı bir geliştirme Firebase projesi kullanın ya da Firebase emülatör paketiyle çalışın. Dokümantasyon, emülatör için demo ile başlayan bir proje kimliği kullanılabileceğini gösterir. Böylece test verisi canlı koleksiyonlara karışmaz. Emülatör paketi veritabanı ve kimlik doğrulama gibi servisleri yerel makinede taklit eder; böylece yanlışlıkla gerçek kullanıcıya ya da canlı koleksiyona yazma riski kalmaz.