Generierte Flutter-SDKs verwenden

Mit Firebase Data Connect-Client-SDKs können Sie Ihre serverseitigen Abfragen und Mutationen direkt über eine Firebase-App aufrufen. Sie generieren ein benutzerdefiniertes Client-SDK parallel, während Sie die Schemas, Abfragen und Mutationen entwerfen, die Sie in Ihrem Data Connect-Dienst bereitstellen. Anschließend integrieren Sie Methoden aus diesem SDK in Ihre Clientlogik.

Wie bereits erwähnt, werden Data Connect-Abfragen und ‑Mutationen nicht vom Clientcode gesendet und auf dem Server ausgeführt. Stattdessen werden Data Connect-Vorgänge bei der Bereitstellung wie Cloud Functions auf dem Server gespeichert. Dies bedeutet, dass Sie entsprechende clientseitige Änderungen bereitstellen müssen, um Probleme mit vorhandenen Nutzern zu vermeiden (z. B. bei älteren Anwendungsversionen).

Deshalb bietet Data Connect eine Entwicklerumgebung und Tools, mit denen Sie serverseitig bereitgestellte Schemas, Abfragen und Mutationen prototypisieren können. Außerdem werden clientseitige SDKs automatisch generiert, während Sie den Prototyp erstellen.

Wenn Sie Updates für Ihre Dienst- und Client-Apps iteriert haben, können sowohl server- als auch clientseitige Updates bereitgestellt werden.

Flutter SDK generieren

Wie bei den meisten Firebase-Projekten erfolgt die Arbeit am Firebase Data Connect-Clientcode in einem lokalen Projektverzeichnis. Sowohl die Data Connect-VS Code-Erweiterung als auch die Firebase-Befehlszeile sind wichtige lokale Tools zum Generieren und Verwalten von Clientcode.

SDK-Generierungsoptionen sind an mehrere Einträge in der Datei dataconnect.yaml gebunden, die bei der Initialisierung des Projekts generiert wurde.

SDK-Generierung initialisieren

Fügen Sie in Ihrer connector.yaml Ihre outputDir, package und (für das Web SDK) packageJsonDir hinzu.
connectorId: movies
generate:
  dartSdk:
    outputDir: ../../lib/generated # Feel free to change this to a different path
    package: movies

outputDir gibt an, wo das generierte SDK ausgegeben werden soll. Dieser Pfad ist relativ zum Verzeichnis, das die connector.yaml-Datei selbst enthält. Optional können Sie einen absoluten Pfad zu outputDir angeben.

package gibt den Paketnamen an.

SDKs während des Prototypings aktualisieren

Wenn Sie interaktiv ein Prototyping mit der Erweiterung „Data Connect VS Code“ und dem Emulator Data Connect erstellen, werden SDK-Quelldateien automatisch generiert und aktualisiert, während Sie .gql-Dateien ändern, mit denen Schemas, Abfragen und Mutationen definiert werden. Dies kann bei Hot-Loading-Workflows nützlich sein.

Wenn Sie in anderen Fällen den Data Connect-Emulator über die Firebase-Befehlszeile verwenden, können Sie .gql-Updates beobachten und SDK-Quellen automatisch aktualisieren lassen.

Alternativ können Sie die SDKs über die Befehlszeile neu generieren, wenn .gql-Dateien geändert werden:

firebase dataconnect:sdk:generate --watch

SDKs für die Integration und für Produktionsversionen generieren

In einigen Fällen, z. B. bei der Vorbereitung von Projektquellen für CI-Tests, können Sie die Firebase CLI für ein Batch-Update aufrufen.

Verwenden Sie in diesen Fällen firebase dataconnect:sdk:generate.

Clientcode einrichten

Data Connect App initialisieren

Initialisieren Sie zuerst Ihre App anhand der standardmäßigen Firebase-Einrichtungsanleitung.

Installieren Sie dann das Data Connect-Plug-in:

flutter pub add firebase_data_connect

Data Connect Flutter SDK initialisieren

Initiieren Sie Ihre Data Connect-Instanz mit den Informationen, die Sie zum Einrichten von Data Connect verwendet haben. Diese finden Sie in der Firebase-Konsole auf dem Tab „Data Connect“.

Bibliotheken importieren

Zum Initialisieren des Clientcodes sind zwei Arten von Importen erforderlich: allgemeine Data Connect-Importe und spezifische, generierte SDK-Importe.

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

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

Flutter-Apps prototypisieren und testen

Clients für die Verwendung eines lokalen Emulators instrumentieren

Sie können den Data Connect-Emulator über die VS Code-Erweiterung „Data Connect“ oder über die Befehlszeile verwenden.

Die Instrumentierung der App für die Verbindung zum Emulator ist für beide Szenarien identisch.

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

Kommentieren Sie Zeilen zum Herstellen einer Verbindung zum Emulator aus, um zu Produktionsressourcen zu wechseln.

Abfragen auf der Clientseite verwenden

Der generierte Code enthält bereits vordefinierte Abfragereferenzen. Sie müssen sie nur importieren und execute darauf anwenden.

import 'generated/movies.dart';

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

SDK-Abfragemethoden aufrufen

Hier ein Beispiel für die Verwendung dieser Funktionen für Aktionskürzel:

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

Optionale Felder

Einige Abfragen enthalten möglicherweise optionale Felder. In diesen Fällen stellt das Flutter SDK eine Builder-Methode bereit, die separat festgelegt werden muss.

Das Feld rating ist beispielsweise beim Aufruf von createMovie optional. Sie müssen es also in der Builder-Funktion angeben.

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

Änderungen abonnieren

Sie können Änderungen abonnieren, die dann jedes Mal aktualisiert werden, wenn Sie eine Abfrage ausführen.

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`

Mutationen auf der Clientseite verwenden

Mutationen sind auf die gleiche Weise zugänglich wie Abfragen.

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

Datentypen im Dart SDK

Der Data Connect-Server steht für gängige GraphQL-Datentypen. Sie werden im SDK so dargestellt:

Data Connect-Typ Dart
Zeitstempel firebase_data_connect.Timestamp
INT (32-Bit) int
Datum DateTime
UUID String
INT64 int
Float double
Boolesch bool
Beliebig firebase_data_connect.AnyValue