Usa gli SDK Flutter generati

Gli SDK client di Firebase Data Connect ti consentono di chiamare le query e le mutazioni lato server direttamente da un'app Firebase. Generi un SDK client personalizzato in parallelo durante la progettazione degli schemi, delle query e delle mutazioni da eseguire nel servizio Data Connect. Poi, integra i metodi di questo SDK nella logica del client.

Come accennato altrove, è importante notare che le query e le mutazioni Data Connect non vengono inviate dal codice client ed eseguite sul server. Al contrario, quando vengono di cui è stato eseguito il deployment, le operazioni Data Connect vengono memorizzate sul server come Cloud Functions. Ciò significa che devi implementare le modifiche lato client corrispondenti per evitare di interrompere gli utenti esistenti (ad esempio, nelle versioni precedenti dell'app).

Per questo motivo, Data Connect fornisce un ambiente di sviluppo e strumenti che ti consentono di realizzare il prototipo di schemi, query e mutazioni di cui è stato eseguito il deployment sul server. Inoltre, genera automaticamente gli SDK lato client durante la creazione del prototipo.

Una volta eseguite le iterazioni degli aggiornamenti delle app di servizio e client, gli aggiornamenti sia lato server sia lato client sono pronti per il deployment.

Generare l'SDK Flutter

Come per la maggior parte dei progetti Firebase, il codice clientFirebase Data Connect viene modificato in una directory del progetto locale. Sia l'estensione VS Code di Data Connect sia la CLI di Firebase sono importanti strumenti locali per la generazione e la gestione del codice client.

Le opzioni di generazione dell'SDK sono associate a diverse voci nel file dataconnect.yaml generato durante l'inizializzazione del progetto.

Inizializza la generazione dell'SDK

In connector.yaml, aggiungi outputDir, package e (per l'SDK web) packageJsonDir.
connectorId: movies
generate:
  dartSdk:
    outputDir: ../../lib/generated # Feel free to change this to a different path
    package: movies

outputDir specifica dove deve essere generato l'SDK. Questo percorso è relativo alla directory che contiene il file connector.yaml stesso. Facoltativamente, puoi fornire un percorso assoluto per il file outputDir.

package specifica il nome del pacchetto.

Aggiornare gli SDK durante la prototipazione

Se stai eseguendo la prototipazione in modo interattivo con l'estensione Data Connect VS Code e il relativo emulatore Data Connect, i file di origine dell'SDK vengono generati e aggiornati automaticamente mentre modifichi i file .gql che definiscono schemi, query e mutazioni. Questa può essere una funzionalità utile nei flussi di lavoro di (ri)caricamento a caldo.

In altri scenari, se utilizzi l'emulatore Data Connect dall'interfaccia a riga di comando Firebase, puoi impostare una sorveglianza sugli aggiornamenti di .gql e anche aggiornare automaticamente le sorgenti SDK.

In alternativa, puoi utilizzare la CLI per rigenerare gli SDK ogni volta che i file .gql vengono modificati:

firebase dataconnect:sdk:generate --watch

Genera SDK per l'integrazione e per le release di produzione

In alcuni scenari, ad esempio per preparare le origini del progetto da inviare per i test CI, puoi chiamare la CLI Firebase per un aggiornamento collettivo.

In questi casi, utilizza firebase dataconnect:sdk:generate.

Configurare il codice client

Inizializza l'app Data Connect

Per prima cosa, inizializza l'app seguendo le istruzioni di configurazione standard di Firebase.

Poi, installa il plug-in Data Connect:

flutter pub add firebase_data_connect

Inizializza l'SDK Flutter Data Connect

Inizializza la tua istanza Data Connect utilizzando le informazioni utilizzate per configurare Data Connect (tutte disponibili nella scheda Data Connect della console Firebase).

Importare librerie

Per inizializzare il codice client sono necessarie due serie di importazioni: le importazioni Data Connect generali e le importazioni SDK generate specifiche.

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

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

Crea prototipi e testa le tue app Flutter

Strumenta i client per utilizzare un emulatore locale

Puoi utilizzare l'emulatore Data Connect, dall'estensione Data Connect VS Code o dall'interfaccia a riga di comando.

L'instrumentazione dell'app per la connessione all'emulatore è la stessa per entrambi gli scenari.

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

Per passare alle risorse di produzione, commenta le righe per la connessione all'emulatore.

Utilizzare le query lato client

Il codice generato sarà già dotato di riferimenti a query predefiniti. Devi solo importare e chiamare execute.

import 'generated/movies.dart';

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

Chiama i metodi di query dell'SDK

Ecco un esempio di utilizzo di queste funzioni di scorciatoia per le azioni:

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

Campi facoltativi

Alcune query potrebbero avere campi facoltativi. In questi casi, l'SDK Flutter espone un metodo di compilatore e dovrà essere impostato separatamente.

Ad esempio, il campo rating è facoltativo quando chiami createMovie, quindi devi fornirlo nella funzione di creazione.

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

Iscriversi alle modifiche

Puoi iscriverti alle modifiche (che verranno aggiornate ogni volta che esegui una query).

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`

Utilizzare le mutazioni lato client

Le mutazioni sono accessibili nello stesso modo delle query.

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

Tipi di dati nell'SDK Dart

Il server Data Connect rappresenta i tipi di dati GraphQL comuni. Queste sono rappresentate nell'SDK come segue.

Tipo di Data Connect Dart
Timestamp firebase_data_connect.Timestamp
Int (32 bit) int
Data DateTime
UUID stringa
Int64 int
In virgola mobile double
Booleano bool
Qualsiasi firebase_data_connect.AnyValue