Oluşturulan Flutter SDK'larını kullanma

Firebase SQL Connect istemci SDK'ları, sunucu tarafı sorgularınızı ve mutasyonlarınızı doğrudan bir Firebase uygulamasından çağırmanıza olanak tanır. SQL Connect hizmetinize dağıttığınız şemaları, sorguları ve mutasyonları tasarlarken paralel olarak özel bir istemci SDK'sı oluşturursunuz. Ardından, bu SDK'daki yöntemleri istemci mantığınıza entegre edersiniz.

Başka yerlerde de belirttiğimiz gibi, SQL Connect sorguların ve mutasyonların istemci kodu tarafından gönderilmediğini ve sunucuda yürütülmediğini unutmayın. Bunun yerine, dağıtıldığında SQL Connect işlemleri Cloud Functions gibi sunucuda depolanır. Bu, mevcut kullanıcıların (örneğin, uygulamanın eski sürümlerinde) sorun yaşamaması için istemci tarafında ilgili değişiklikleri yapmanız gerektiği anlamına gelir.

Bu nedenle SQL Connect, sunucuya dağıtılan şemalarınızın, sorgularınızın ve mutasyonlarınızın prototipini oluşturmanıza olanak tanıyan bir geliştirici ortamı ve araçlar sunar. Ayrıca prototip oluştururken istemci tarafı SDK'ları otomatik olarak oluşturur.

Hizmet ve istemci uygulamalarınızda güncellemeleri yinelediğinizde hem sunucu hem de istemci tarafı güncellemeleri dağıtıma hazır olur.

İstemci geliştirme iş akışı nedir?

Başlangıç bölümünü takip ettiyseniz SQL Connect için genel geliştirme akışını öğrenmişsinizdir. Bu kılavuzda, şemanızdan Flutter SDK'ları oluşturma ve istemci sorguları ile mutasyonlarıyla çalışma hakkında daha ayrıntılı bilgi bulabilirsiniz.

Özetlemek gerekirse, oluşturulan Flutter SDK'larını istemci uygulamalarınızda kullanmak için aşağıdaki ön koşul adımlarını uygulamanız gerekir:

  1. Firebase'i Flutter uygulamanıza ekleyin.
  2. flutterfire CLI'yı yükleyin dart pub global activate flutterfire_cli.
  3. flutterfire configure komutunu çalıştırın.

Ardından:

  1. Uygulama şemanızı geliştirin.
  2. SDK oluşturma işlemini ayarlama:

  3. İstemci kodunuzu ilk kullanıma hazırlayın ve kitaplıkları içe aktarın.

  4. Sorgulara ve mutasyonlara çağrıları uygulayın.

  5. SQL Connect emülatörünü kurup kullanın ve yineleyin.

Flutter SDK'nızı oluşturma

Uygulamalarınızda SQL Connect tarafından oluşturulan SDK'ları ayarlamak için Firebase CLI'yı kullanın. init komutu, mevcut klasördeki tüm uygulamaları algılamalı ve oluşturulan SDK'ları otomatik olarak yüklemelidir.

firebase init dataconnect:sdk

Prototip oluştururken SDK'ları güncelleme

SQL Connect VS Code uzantısı yüklüyse oluşturulan SDK'lar her zaman güncel tutulur.

SQL Connect VS Code uzantısını kullanmıyorsanız oluşturulan SDK'ları güncel tutmak için Firebase CLI'yı kullanabilirsiniz.

firebase dataconnect:sdk:generate --watch

Derleme ardışık düzenlerinde SDK oluşturma

CI/CD derleme süreçlerinde SQL Connect SDK'ları oluşturmak için Firebase CLI'yı kullanabilirsiniz.

firebase dataconnect:sdk:generate

İstemci kodunu ayarlama

SQL Connect uygulamanızı başlatma

Öncelikle standart Firebase kurulum talimatlarını kullanarak uygulamanızı başlatın.

Ardından SQL Connect eklentisini yükleyin:

flutter pub add firebase_data_connect

SQL Connect Flutter SDK'sını başlatma

SQL Connect örneğinizi, SQL Connect kurulumu için kullandığınız bilgileri kullanarak başlatın. Bu bilgileri Firebase konsolunun Databases & Storage (Veritabanları ve Depolama Alanı) > SQL Connect sayfasında bulabilirsiniz.

Kitaplıkları içe aktarma

İstemci kodunuzu ilk kullanıma hazırlamak için iki içe aktarma grubu gerekir: genel SQL Connect içe aktarmalar ve belirli, oluşturulan SDK içe aktarmaları.

// general imports
import 'package:firebase_data_connect/firebase_data_connect.dart';

// generated queries and mutations from SDK
import 'generated/movies.dart';

İstemci tarafında sorguları kullanma

Oluşturulan kod, önceden tanımlanmış sorgu referanslarıyla birlikte gelir. Tek yapmanız gereken, bunları içe aktarıp execute yöntemini çağırmaktır.

import 'generated/movies.dart';

await MoviesConnector.instance.listMovies().execute();

SDK sorgu yöntemlerini çağırma

Bu işlem kısayolu işlevlerini kullanan bir örneği aşağıda bulabilirsiniz:

import 'generated/movies.dart';

function onBtnClick() {
  // This will call the generated Dart from the CLI and then make an HTTP request to the server.
  MoviesConnector.instance.listMovies().execute().then(data => showInUI(data)); // == MoviesConnector.instance.listMovies().ref().execute();
}

İsteğe bağlı alanlar

Bazı sorgularda isteğe bağlı alanlar olabilir. Bu durumlarda Flutter SDK'sı bir oluşturucu yöntemi sunar ve ayrı olarak ayarlanması gerekir.

Örneğin, createMovie çağrılırken rating alanı isteğe bağlıdır. Bu nedenle, bu alanı oluşturucu işlevinde sağlamanız gerekir.

await MoviesConnector.instance.createMovie( title: 'Empire Strikes Back', releaseYear: 1980, genre: 'Sci-Fi').rating(5).execute();

Değişikliklere abone olma

SQL Connect uygulamasından anlık güncellemeler alma başlıklı makaleyi inceleyin.

Numaralandırma alanlarındaki değişiklikleri işleme

Bir uygulamanın şeması, GraphQL sorgularınız tarafından erişilebilen numaralandırmalar içerebilir.

Uygulamanın tasarımı değiştikçe yeni enum desteklenen değerler ekleyebilirsiniz. Örneğin, uygulamanızın yaşam döngüsünün ilerleyen aşamalarında AspectRatio enum'una FULLSCREEN değerini eklemeye karar verdiğinizi varsayalım.

SQL Connect iş akışında, sorgularınızı ve SDK'larınızı güncellemek için yerel geliştirme araçlarını kullanabilirsiniz.

Ancak istemcilerinizin güncellenmiş bir sürümünü yayınlamadan önce, daha önce dağıtılan istemciler bozulabilir.

Esnek uygulama örneği

Oluşturulan SDK, bilinmeyen değerlerin işlenmesini zorunlu kılar. Yani istemci kodu, EnumValue nesnesini Known veya Unknown olarak açmalıdır.

final result = await MoviesConnector.instance.listMovies().execute();

if (result.data != null && result.data!.isNotEmpty) {
  handleEnumValue(result.data![0].aspectratio);
}

void handleEnumValue(EnumValue<AspectRatio> aspectValue) {
  if (aspectValue.value != null) {
    switch(aspectValue.value!) {
      case AspectRatio.ACADEMY:
        print('This movie is in Academy aspect');
        break;
      case AspectRatio.WIDESCREEN:
        print('This movie is in Widescreen aspect');
        break;
      case AspectRatio.ANAMORPHIC:
        print('This movie is in Anamorphic aspect');
        break;
      case AspectRatio.IMAX:
        print('This movie is in IMAX aspect');
    }
  } else {
    print('Unknown aspect ratio detected: ${aspectValue.stringValue}');
  }
}

İstemci tarafı önbelleğe almayı etkinleştirme

SQL Connect, connector.yaml dosyasını düzenleyerek etkinleştirebileceğiniz isteğe bağlı bir istemci tarafı önbelleğe alma özelliğine sahiptir. Bu özellik etkinleştirildiğinde, oluşturulan istemci SDK'ları sorgu yanıtlarını yerel olarak önbelleğe alır. Bu sayede uygulamanızın yaptığı veritabanı isteklerinin sayısı azalır ve ağ bağlantısı kesildiğinde uygulamanızın veritabanına bağlı bölümleri çalışmaya devam eder.

İstemci tarafı önbelleğe almayı etkinleştirmek için bağlayıcı yapılandırmanıza bir istemci önbelleğe alma yapılandırması ekleyin:

generate:
  javascriptSdk:
    outputDir: ../dart/
    package: "dataconnect_generated"
    clientCache:
      maxAge: 5s
      storage: memory

Bu yapılandırmanın her ikisi de isteğe bağlı olan iki parametresi vardır:

  • maxAge: İstemci SDK'sı yeni değerleri getirmeden önce önbelleğe alınmış bir yanıtın sahip olabileceği maksimum yaş. Örnekler: "0", "30s", "1h30m".

    maxAge için varsayılan değer 0 olduğundan yanıtlar önbelleğe alınır ancak istemci SDK'sı her zaman yeni değerleri getirir. Önbelleğe alınan değerler yalnızca CACHE_ONLY, execute() olarak belirtildiğinde ve subscribe() tarafından döndürülen ilk sonuçta kullanılır.

  • storage: İstemci SDK'sı, yanıtları persistent depolama alanında veya memory içinde önbelleğe alacak şekilde yapılandırılabilir. persistent depolama alanında önbelleğe alınan sonuçlar, uygulama yeniden başlatıldığında da korunur. Android veya iOS hedeflenirken varsayılan değer persistent olur. Web tarayıcıları hedeflenirken yalnızca memory depolama alanı desteklenir.

Bağlayıcınızın önbelleğe alma yapılandırmasını güncelledikten sonra istemci SDK'larınızı yeniden oluşturun ve uygulamanızı yeniden derleyin. Bu işlemi tamamladıktan sonra execute() ve subscribe(), yanıtları önbelleğe alır ve yapılandırdığınız politikaya göre önbelleğe alınmış değerleri kullanır. Bu işlem genellikle sizin ek bir işlem yapmanıza gerek kalmadan otomatik olarak gerçekleşir. Ancak aşağıdakilere dikkat edin:

  • execute() için varsayılan davranış yukarıda açıklandığı gibidir: Bir sorgu için sonuç önbelleğe alınmışsa ve önbelleğe alınan değer maxAge değerinden daha eski değilse önbelleğe alınan değer kullanılır. Bu varsayılan davranış, PREFER_CACHE politikası olarak adlandırılır.

    Ayrıca, execute() için tek tek çağrılar belirterek yalnızca önbelleğe alınmış değerleri yayınlamasını (CACHE_ONLY) veya sunucudan koşulsuz olarak yeni değerleri getirmesini (SERVER_ONLY) sağlayabilirsiniz.

    await queryRef.execute(fetchPolicy: QueryFetchPolicy.cacheOnly);
    
    await queryRef.execute(fetchPolicy: QueryFetchPolicy.serverOnly);
    
  • subscribe() yöntemini çağırdığınızda, maxAge ayarından bağımsız olarak, varsa önbelleğe alınmış içeriği her zaman hemen döndürür. execute() için sonraki çağrılar, yapılandırılan maxAge uyarınca dinleyicileri bilgilendirir.

İstemci tarafında mutasyonları kullanma

Mutasyonlara sorgularla aynı şekilde erişilebilir.

await MoviesConnector.instance.createMovie({ title: 'Empire Strikes Back', releaseYear: 1980, genre: "Sci-Fi" }).rating(5).execute();

Flutter uygulamalarınızın prototipini oluşturma ve test etme

İstemcileri yerel emülatör kullanacak şekilde ayarlama

SQL Connect emülatörünü SQL Connect VS Code uzantısından veya CLI'dan kullanabilirsiniz.

Uygulamayı emülatöre bağlanacak şekilde yapılandırma işlemi her iki senaryoda da aynıdır.

import 'package:firebase_data_connect/firebase_data_connect.dart';
import 'generated/movies.dart';

MoviesConnector.instance.dataConnect
          .useDataConnectEmulator('127.0.0.1', 9399);

// Make calls from your app
QueryRef<ListMoviesData, void> ref = MoviesConnector.instance.listMovies.ref();

Üretim kaynaklarına geçmek için emülatöre bağlanma satırlarını açıklama satırı yapın.

Dart SDK'sındaki veri türleri

SQL Connect sunucusu, yaygın GraphQL veri türlerini temsil eder. Bunlar SDK'da aşağıdaki gibi gösterilir.

SQL Connect Türü Dart
Zaman damgası firebase_data_connect.Timestamp
Int (32 bit) int
Tarih DateTime
UUID dize
Int64 int
Kayan çift
Boole bool
Hepsi firebase_data_connect.AnyValue