Generierte Flutter-SDKs verwenden

Mit den 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 zur Entwicklung der Schemas, Abfragen und Mutationen, die Sie für Ihren Data Connect-Dienst bereitstellen. Anschließend binden Sie Methoden aus diesem SDK in Ihre Clientlogik ein.

Wie bereits erwähnt, ist es wichtig zu beachten, dass Data Connect-Abfragen und ‑Mutationen nicht vom Clientcode gesendet und auf dem Server ausgeführt werden. Stattdessen werden Data Connect-Vorgänge bei der Bereitstellung auf dem Server wie Cloud Functions gespeichert. Das bedeutet, dass Sie entsprechende clientseitige Änderungen bereitstellen müssen, um zu vermeiden, dass bestehende Nutzer (z. B. in älteren App-Versionen) beeinträchtigt werden.

Data Connect bietet Ihnen daher eine Entwicklungsumgebung und Tools, mit denen Sie Prototypen Ihrer serverbasierten Schemas, Abfragen und Mutationen erstellen können. Außerdem werden clientseitige SDKs automatisch generiert, während Sie Prototypen erstellen.

Wenn Sie die Aktualisierungen für Ihren Dienst und Ihre Client-Apps durchlaufen haben, können sowohl serverseitige als auch clientseitige Aktualisierungen bereitgestellt werden.

Wie sieht der Workflow für die Cliententwicklung aus?

Wenn Sie dem Startleitfaden gefolgt sind, haben Sie den allgemeinen Entwicklungsablauf für Data Connect kennengelernt. In diesem Leitfaden finden Sie detailliertere Informationen zum Generieren von Flutter-SDKs aus Ihrem Schema und zum Arbeiten mit Clientabfragen und ‑Mutationen.

Zusammenfassend lässt sich sagen, dass Sie zum Verwenden generierter Flutter-SDKs in Ihren Client-Apps die folgenden Voraussetzungen erfüllen müssen:

  1. Fügen Sie Ihrer Flutter-App Firebase hinzu.
  2. Installieren Sie die FlutterFire-Befehlszeile dart pub global activate flutterfire_cli.
  3. Führen Sie flutterfire configure aus.

Gehen Sie anschließend so vor:

  1. App-Schema entwickeln
  2. SDK-Generierung einrichten:

  3. Clientcode initialisieren und Bibliotheken importieren

  4. Aufrufe für Abfragen und Mutationen implementieren

  5. Data Connect-Emulator einrichten und verwenden und iterieren.

Flutter SDK generieren

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

Die Optionen für die SDK-Generierung sind an mehrere Einträge in der Datei dataconnect.yaml gebunden, die beim Initialisieren des Projekts generiert wurde.

SDK-Generierung initialisieren

Fügen Sie in Ihrem 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, wohin das generierte SDK ausgegeben werden soll. Dieser Pfad ist relativ zum Verzeichnis, das die Datei connector.yaml enthält. Optional können Sie einen absoluten Pfad zu Ihrer outputDir angeben.

package gibt den Paketnamen an.

SDKs während der Prototyperstellung aktualisieren

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

In anderen Szenarien, wenn Sie den Data Connect-Emulator über die Firebase-Befehlszeile verwenden, können Sie eine Beobachtung für .gql-Updates festlegen und SDK-Quellen automatisch aktualisieren lassen.

Alternativ können Sie die CLI verwenden, um SDKs immer dann neu zu 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. beim Vorbereiten von Projektquellen für CI-Tests, können Sie die Firebase CLI für eine Batchaktualisierung aufrufen.

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

Clientcode einrichten

Data Connect-App initialisieren

Initialisieren Sie Ihre App zuerst gemäß der Standardanleitung für die Firebase-Einrichtung.

Installieren Sie dann das Data Connect-Plug-in:

flutter pub add firebase_data_connect

Data Connect Flutter SDK initialisieren

Initialisieren Sie Ihre Data Connect-Instanz mit den Informationen, die Sie zum Einrichten von Data Connect verwendet haben. Alle Informationen sind in der Firebase-Konsole auf dem Tab „Data Connect“ verfügbar.

Bibliotheken importieren

Es sind zwei Importsätze erforderlich, um Ihren Clientcode zu initialisieren: 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';

Abfragen clientseitig verwenden

Der generierte Code enthält bereits vordefinierte Query-Refs. Sie müssen sie nur importieren und execute aufrufen.

import 'generated/movies.dart';

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

SDK-Abfragemethoden aufrufen

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

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 können optionale Felder enthalten. In diesen Fällen stellt das Flutter SDK eine Builder-Methode bereit, die separat festgelegt werden muss.

Das Feld rating ist beispielsweise optional, wenn createMovie aufgerufen wird. 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 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

Auf Mutationen kann auf dieselbe Weise wie auf Abfragen zugegriffen werden.

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

Flutter-Apps prototypisieren und testen

Clients für die Verwendung eines lokalen Emulators instrumentieren

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

Die Instrumentierung der App für die Verbindung zum Emulator ist in beiden 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();

Wenn Sie zu Produktionsressourcen wechseln möchten, kommentieren Sie die Zeilen aus, die für die Verbindung zum Emulator zuständig sind.

Datentypen im Dart SDK

Der Data Connect-Server stellt allgemeine GraphQL-Datentypen dar. 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