Gli SDK client 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 alla progettazione degli schemi, delle query e delle mutazioni che implementi nel tuo servizio Data Connect. Poi, integra i metodi di questo SDK nella logica del client.
Come abbiamo già detto, è importante notare che Data Connect le query e le mutazioni non vengono inviate dal codice client ed eseguite sul server. Al contrario, una volta eseguito il deployment, le operazioni Data Connect vengono archiviate sul server come Cloud Functions. Ciò significa che devi implementare le modifiche lato client corrispondenti per evitare di interrompere l'esperienza degli utenti esistenti (ad esempio, nelle versioni precedenti dell'app).
Per questo motivo, Data Connect ti fornisce un ambiente di sviluppo e strumenti che ti consentono di prototipare schemi, query e mutazioni implementati sul server. Inoltre, genera automaticamente gli SDK lato client durante la prototipazione.
Una volta completati gli aggiornamenti iterativi del servizio e delle app client, gli aggiornamenti lato server e lato client sono pronti per il deployment.
Qual è il flusso di lavoro di sviluppo del cliente?
Se hai seguito la guida Inizia, hai appreso il flusso di sviluppo complessivo per Data Connect. In questa guida troverai informazioni più dettagliate sulla generazione di SDK Flutter dallo schema e sull'utilizzo di query e mutazioni client.
Per riassumere, per utilizzare gli SDK Flutter generati nelle tue app client, segui questi passaggi preliminari:
- Aggiungi Firebase alla tua app Flutter.
- Installa l'interfaccia a riga di comando FlutterFire
dart pub global activate flutterfire_cli
. - Esegui
flutterfire configure
.
Quindi:
- Sviluppa lo schema dell'app.
Configura la generazione dell'SDK:
- Con il pulsante Aggiungi SDK all'app nella nostra estensione VS Code Data Connect
- Aggiornando il tuo
connector.yaml
.
Genera l'SDK Flutter
Utilizza la CLI Firebase per configurare gli SDK generati da Data Connect nelle tue app.
Il comando init
deve rilevare tutte le app nella cartella corrente e installare
automaticamente gli SDK generati.
firebase init dataconnect:sdk
Aggiornare gli SDK durante la prototipazione
Se hai installato l'estensione Data Connect VS Code, gli SDK generati saranno sempre aggiornati.
Se non utilizzi l'estensione Data Connect VS Code, puoi utilizzare la CLI Firebase per mantenere aggiornati gli SDK generati.
firebase dataconnect:sdk:generate --watch
Genera SDK nelle pipeline di build
Puoi utilizzare la CLI Firebase per generare gli SDK Data Connect nei processi di build CI/CD.
firebase dataconnect:sdk:generate
Configurare il codice client
Inizializzare l'app Data Connect
Per prima cosa, inizializza l'app utilizzando 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 l'istanza Data Connect utilizzando le informazioni che hai utilizzato per configurare Data Connect (tutte disponibili nella scheda Data Connect della console Firebase).
Importare librerie
Per inizializzare il codice client sono necessari due set di importazioni: importazioni Data Connect generali e importazioni specifiche dell'SDK generate.
// general imports
import 'package:firebase_data_connect/firebase_data_connect.dart';
// generated queries and mutations from SDK
import 'generated/movies.dart';
Utilizzare le query lato client
Il codice generato includerà già i riferimenti alle query predefiniti. Tutto ciò che devi fare
è importare e chiamare execute
.
import 'generated/movies.dart';
await MoviesConnector.instance.listMovies().execute();
Metodi di query dell'SDK di chiamata
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 creazione e dovrà essere impostato separatamente.
Ad esempio, il campo rating
è facoltativo quando si chiama createMovie
, quindi
devi fornirlo nella funzione di creazione.
await MoviesConnector.instance.createMovie({ title: 'Empire Strikes Back', releaseYear: 1980, genre: "Sci-Fi"}).rating(5).execute();
Iscriviti 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`
Gestire le modifiche ai campi di enumerazione
Lo schema di un'app può contenere enumerazioni, a cui è possibile accedere tramite le query GraphQL.
Man mano che il design di un'app cambia, puoi aggiungere nuovi valori enum supportati. Ad esempio,
immagina che in un secondo momento del ciclo di vita della tua applicazione decidi di aggiungere un valore
FULLSCREEN all'enumerazione AspectRatio
.
Nel flusso di lavoro Data Connect, puoi utilizzare gli strumenti di sviluppo locali per aggiornare le query e gli SDK.
Tuttavia, prima di rilasciare una versione aggiornata dei client, i client meno recenti potrebbero non funzionare.
Esempio di implementazione resiliente
L'SDK generato forza la gestione dei valori sconosciuti. ovvero il codice client deve
decomprimere l'oggetto EnumValue
in Known
o Unknown
.
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}");
}
}
Utilizzare le mutazioni lato client
Le mutazioni sono accessibili allo stesso modo delle query.
await MoviesConnector.instance.createMovie({ title: 'Empire Strikes Back', releaseYear: 1980, genre: "Sci-Fi" }).rating(5).execute();
Prototipa e testa le tue app Flutter
Strumentare i client per utilizzare un emulatore locale
Puoi utilizzare l'emulatore Data Connect, sia dall'estensione VS Code Data Connect sia dalla CLI.
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.
Tipi di dati nell'SDK Dart
Il server Data Connect rappresenta i tipi di dati GraphQL comuni. Questi sono rappresentati nell'SDK come segue.
Tipo di connessione 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 |