Flutter / Firestore

Merhaba, bu yazıda bir flutter uygulamasında firebase kullanarak database oluşturacağız. Basitçe bir kullanıcı oluşturup veritabanına ekleyeceğiz ve veritabanından sorgulama işlemleri yapacağız. Fakat ilk etapta firestore hakkında bilinmesi gereken bazı konulardan bahsedelim.

 Bildiğimiz gibi standart ilişkisel veritabanlarında, en tepede bir veritabanı ve bunun içinde de verileri sakladığımız tablolar mevcut. Firebase de ise bu kavramlar yok fakat benzer bir yaklaşımla Collection ismi verdiğimiz yapılar veritabanına karşılık, Document dediğimiz yapılar da tablolara karşılık gelmekte. Veriler Document ler içerisinde key, value ikilileri olarak tutulmakta. Yani bir json formatında bulunuyor diyebiliriz. Şimdi projemize geçelim.

Bunun için aşağıdaki sırayı takip edeceğiz:

  1. Uygulamamızı Firebase e Kaydetmeliyiz.

Firebase console u açarak uygulamamızı bir firebase projesi olarak kaydedeceğiz. Bu işlemleri anlattığımız yazımıza buraya tıklayarak erişebilirsiniz. 

  1. pubspec.yaml Dosyasına Cloud Firestore u Eklemeliyiz.

Bunun için pubspec.yaml ye cloud_firestore u ekleyebilirsiniz ya da terminalden aşağıdaki komutu çalıştırabilirsiniz:

flutter pub add cloud_firestore”

  1. Proje Ağacımızı Oluşturalım

Benim oluşturduğum proje ağacının görseli şu şekilde: 

  1. Database Sınıfımızı Oluşturalım ve Gerekli Metodları Yazalım
import 'package:cloud_firestore/cloud_firestore.dart';
import '../model/user.dart';

class FirestoreService {
  Future<bool?> addUser({required User user}) async {
    try {
      CollectionReference users =
          FirebaseFirestore.instance.collection('users');
      await users.doc(user.email).set({
        'name': user.name,
        'surname': user.surname,
      });
      return true;
    } catch (e) {
      return false;
    }
  }

  Future<User?> getUser(String email) async {
    try {
      CollectionReference users =
          FirebaseFirestore.instance.collection('users');
      final snapshot = await users.doc(email).get();
      final data = snapshot.data() as Map<String, dynamic>;
      User user = User();
      user.email = email;
      user.name = data['name'];
      user.surname = data['surname'];
      return user;
    } catch (e) {
      return null;
    }
  }
}

Kullanıcı eklemek için ve veritabanından istenilen kullanıcıyı çekmek için 2 farklı metod yazdık. 

  • addUser metodunda firestore a oluşturduğumuz user isimli collection a ulaşıyoruz, eğer bu isimde bir collection yoksa firebase bunu otomatik olarak oluşturacak. Daha sonra id niteliğinde email adresi isimli bir document oluşturarak diğer bilgileri buraya key value ikilileri şeklinde atıyoruz.
  • getUser metodunda ise email adresine göre gerekli collection a erişip kullanıcı bilgileri çekiyoruz ve User nesnesi olarak geri döndürüyoruz.
  1. Arayüz Tasarlayalım ve Bilgileri Gösterelim

Basit bir arayüz tasarlayacağız, amacımız sadece veritabanına bir kayıt atmak ve sonrasında bu kayda ulaşıp dönen bilgileri ekrana yazdırmak olacak. 

Ekranımız bu şekilde:

Save butonumuz aşağıdaki şekilde:

saveButton() {
    return ElevatedButton(
      onPressed: () {
        User user = User();
        user.email = emailController.text;
        user.name = nameController.text;
        user.surname = surnameController.text;
        widget.service.addUser(user: user).then((value) {
          //some process after executing insertion
        });
      },
      child: const Text("Save"),
    );
  }

Get butonumuz aşağıdaki şekilde:

getButton() {
    return ElevatedButton(
      onPressed: () async {
        User? user = await widget.service.getUser(emailController.text);
        //handle user
        print(user?.name);
        print(user?.surname);
      },
      child: const Text("Get"),
    );
  }

Uygulamamız bu kadar, uygulama kodlarının tamamına aşağıdaki github linkinden ulaşabilirsiniz. 

https://github.com/aedemirsen/FlutterTutorials/tree/main/firebase/flutter_firestore

İyi Çalışmalar

NOT: 

Firestore’un 

android için desteklediğini compile versiyonu: 28 ve üzeri, (android/app/build.gradle)

ios için ise 10 ve üzeri platform versiyonudur. (ios/podfile)

Leave a Reply

Your email address will not be published. Required fields are marked *