Korzystanie z wygenerowanych pakietów Flutter SDK

Pakiety SDK klienta Firebase Data Connect umożliwiają wywoływanie zapytań i mutacji po stronie serwera bezpośrednio z aplikacji Firebase. Niestandardowy pakiet SDK klienta generujesz równolegle podczas projektowania schematów, zapytań i mutacji wdrażanych w usłudze Data Connect. Następnie integrujesz metody z tego pakietu SDK z logiką klienta.

Jak już wspomnieliśmy w innych miejscach, należy zwrócić uwagę, że zapytania i mutacje Data Connect nie są przesyłane przez kod klienta i wykonywane na serwerze. Zamiast tego po wdrożeniu operacje Data Connect są przechowywane na serwerze, podobnie jak w przypadku Cloud Functions. Oznacza to, że musisz wdrożyć odpowiednie zmiany po stronie klienta, aby nie zakłócać działania aplikacji u dotychczasowych użytkowników (np. w starszych wersjach aplikacji).

Dlatego Data Connect udostępnia środowisko programistyczne i narzędzia, które pozwalają tworzyć prototypy schematów, zapytań i mutacji wdrażanych przez serwer. Podczas tworzenia prototypu automatycznie generuje też zestawy SDK po stronie klienta.

Po iteracji aktualizacji usługi i aplikacji klienckich aktualizacje zarówno po stronie serwera, jak i klienta będą gotowe do wdrożenia.

Generowanie pakietu SDK Flutter

Tak jak w przypadku większości projektów Firebase, praca nad kodem klienta Firebase Data Connect odbywa się w lokalnym katalogu projektów. Zarówno rozszerzenie Data Connect w VS Code, jak i narzędzie wiersza poleceń Firebase są ważnymi narzędziami lokalnymi do generowania kodu klienta i zarządzania nim.

Opcje generowania pakietu SDK są powiązane z kilkoma wpisami w pliku dataconnect.yaml, który został wygenerowany podczas inicjowania projektu.

Inicjowanie generowania pakietu SDK

W konfiguracji connector.yaml dodaj swoje outputDir, package i (w przypadku pakietu SDK na potrzeby internetu) packageJsonDir.
connectorId: movies
generate:
  dartSdk:
    outputDir: ../../lib/generated # Feel free to change this to a different path
    package: movies

outputDir określa, gdzie ma być zapisany wygenerowany pakiet SDK. Ta ścieżka jest względna do katalogu zawierającego plik connector.yaml. Opcjonalnie możesz podać ścieżkę bezwzględną do pliku outputDir.

package określa nazwę pakietu.

Aktualizowanie pakietów SDK podczas prototypowania

Jeśli tworzysz interaktywne prototypy za pomocą rozszerzenia Data Connect VS Code i jego emulatora Data Connect, pliki źródłowe pakietu SDK są generowane automatycznie i aktualizowane podczas modyfikowania plików .gql definiujących schematy, zapytania i mutacje. Może to być przydatna funkcja w przypadku procesów (ponownego) wczytywania na gorąco.

W innych przypadkach, jeśli używasz emulatora Data Connect z poziomu wiersza poleceń Firebase, możesz skonfigurować monitorowanie aktualizacji .gql, a także automatycznie aktualizować źródła pakietu SDK.

Możesz też użyć interfejsu wiersza poleceń, aby wygenerować pakiety SDK za każdym razem, gdy zmienisz pliki .gql:

firebase dataconnect:sdk:generate --watch

Generowanie pakietów SDK na potrzeby integracji i wersji produkcyjnych

W niektórych przypadkach, np. podczas przygotowywania źródeł projektu do przesłania na potrzeby testów CI, możesz wywołać interfejs wiersza poleceń Firebase w celu aktualizacji zbiorczej.

W takich przypadkach użyj firebase dataconnect:sdk:generate.

Konfigurowanie kodu klienta

Inicjalizacja aplikacji Data Connect

Najpierw zainicjuj aplikację zgodnie ze standardowymi instrukcjami konfiguracji Firebase.

Następnie zainstaluj wtyczkę Data Connect:

flutter pub add firebase_data_connect

Zainicjuj pakiet SDK Data ConnectFlutter

Zainicjuj instancję Data Connect, korzystając z informacji użytych do skonfigurowania usługi Data Connect (wszystkie dostępne w konsoli Firebase na karcie Data Connect).

Importowanie bibliotek

Do zainicjowania kodu klienta potrzebne są 2 zbiory importów: ogólne importy Data Connect i konkretne, wygenerowane importy pakietu SDK.

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

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

Twórz prototypy i testuj aplikacje Flutter

Użyj klienta do korzystania z lokalnego emulatora

Możesz użyć emulatora Data Connect, korzystając z rozszerzenia Data Connect w VS Code lub z poziomu wiersza poleceń.

W obu przypadkach instrumentowanie aplikacji w celu połączenia z emulatorem jest takie samo.

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();

Aby przełączyć się na zasoby produkcyjne, skomentuj wiersze służące do łączenia się z emulatorem.

Korzystanie z zapytań po stronie klienta

Wygenerowany kod będzie już zawierać wstępnie zdefiniowane odwołania do zapytania. Wystarczy, że zaimportujesz i wywołasz execute.

import 'generated/movies.dart';

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

Wywoływanie metod zapytań pakietu SDK

Oto przykład wykorzystania funkcji skrótów do działań:

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();
}

Pola opcjonalne

Niektóre zapytania mogą zawierać pola opcjonalne. W takich przypadkach pakiet SDK Flutter udostępnia metodę Builder, którą trzeba ustawić osobno.

Na przykład pole rating jest opcjonalne podczas wywoływania funkcji createMovie, więc musisz je podać w funkcji kreatora.

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

Subskrybowanie zmian

Możesz subskrybować zmiany (będą one aktualizowane za każdym razem, gdy wykonasz zapytanie).

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`

Korzystanie z mutacji po stronie klienta

Mutacje są dostępne w taki sam sposób jak zapytania.

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

Typy danych w pakiecie SDK Dart

Serwer Data Connect reprezentuje typowe typy danych GraphQL. W pakiecie SDK są one reprezentowane w ten sposób:

Typ połączenia danych Dart
Sygnatura czasowa firebase_data_connect.timestamp
Int (32-bitowa) int,
Data Data i godzina
UUID ciąg znaków
Int64 int,
Liczba zmiennoprzecinkowa double,
Wartość logiczna bool
Dowolna firebase_data_connect.DowolnaValue