Oluşturulan Flutter SDK'larını kullanma

Firebase Data 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. Şemaları, sorguları ve mutasyonları tasarlarken özel bir istemci SDK'sı oluşturursunuz. Bu öğeleri Data Connect hizmetinize dağıtırsınız. Ardından, bu SDK'daki yöntemleri istemci mantığınıza entegre edersiniz.

Başka bir yerde de belirttiğimiz gibi, Data Connectsorguların ve mutasyonların istemci kodu tarafından gönderilmediğini ve sunucuda yürütülmediğini unutmamak önemlidir. Bunun yerine, dağıtıldığında Data Connect işlemleri Cloud Functions gibi sunucuda depolanır. Bu nedenle, mevcut kullanıcıların (ör. uygulamanın eski sürümlerinde) deneyimini bozmamak için ilgili istemci tarafı değişikliklerini dağıtmanız gerekir.

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

Hizmetinizde ve istemci uygulamalarınızda güncellemeleri yineledikten sonra hem sunucu hem de istemci tarafı güncellemeleri dağıtılmaya hazır olur.

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

Başlangıç bölümünü incelediyseniz Data Connect için genel geliştirme akışıyla tanışmışsınızdır. Bu kılavuzda, şemanızdan Flutter SDK'ları oluşturma, istemci sorguları ve mutasyonlarla ç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. Koşu flutterfire configure.

Ardından:

  1. Uygulama şemanızı geliştirin.
  2. SDK oluşturmayı ayarlayın:

  3. İstemci kodunuzu başlatın ve kitaplıkları içe aktarın.

  4. Sorgu ve mutasyon çağrılarını uygulayın.

  5. Data Connect emülatörünü ayarlayıp kullanın ve yineleyin.

Flutter SDK'nızı oluşturun

Uygulamalarınızda Data Connect tarafından oluşturulan SDK'ları ayarlamak için Firebase KSA'yı kullanın. init komutu, geçerli 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

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

Data 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 Data Connect SDK'ları oluşturmak için Firebase CLI'yi kullanabilirsiniz.

firebase dataconnect:sdk:generate

Müşteri kodunu ayarlama

Data Connect uygulamanızı başlatın

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

Ardından, Data Connect eklentisini yükleyin:

flutter pub add firebase_data_connect

Data Connect Flutter SDK'sını başlatın.

Data Connect örneğinizi, Data Connect'i ayarlamak için kullandığınız bilgileri kullanarak başlatın (tümü Firebase konsolunun Data Connect sekmesinde bulunur).

Kitaplıkları içe aktarma

İstemci kodunuzu başlatmak için iki grup içe aktarma işlemi gerekir: genel Data Connect içe aktarma işlemleri ve belirli, oluşturulmuş SDK içe aktarma işlemleri.

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

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

İstemci tarafında sorgu kullanma

Oluşturulan kodda önceden tanımlanmış sorgu referansları bulunur. Yapmanız gereken tek şey bunları içe aktarıp execute işlevini çağırmaktır.

import 'generated/movies.dart';

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

SDK sorgu yöntemlerini çağırma

Bu işlem kısayolu işlevlerinin kullanıldığı 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 bir oluşturucu yöntemi kullanır ve ayrı olarak ayarlanması gerekir.

Örneğin, createMovie çağrılırken rating alanı isteğe bağlıdır. Bu nedenle, oluşturucu işlevinde bu alanı 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

Değişikliklere abone olabilirsiniz (bu değişiklikler, sorgu yürüttüğünüz her seferde güncellenir).

QueryRef<ListMoviesData, void> listRef = MoviesConnector.instance.listMovies().ref();

// subscribe will immediately invoke the query if no execute was called on it previously.
listRef.subscribe().listen((data) {
  updateUIWithMovies(data.movies);
});

await MoviesConnector.instance.createMovie({ title: 'Empire Strikes Back', releaseYear: 1980, genre: "Sci-Fi" }).rating(5).execute();
await listRef.execute(); // will update the subscription above`

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

Bir uygulamanın şeması, numaralandırmalar içerebilir ve bu numaralandırmalara GraphQL sorgularınızla erişilebilir.

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

Data 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ılmış eski 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 sarmalamadan çıkarmalı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ı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 bir emülatör kullanacak şekilde yapılandırma

Data Connect emülatörünü, Data Connect VS Code uzantısından veya KSA'dan kullanabilirsiniz.

Uygulamayı emülatöre bağlanacak şekilde ayarlama 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ı yorum satırı yapın.

Dart SDK'sındaki veri türleri

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

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