Usa SDKs de Flutter generados

Los SDK de cliente de Firebase Data Connect te permiten llamar a tus consultas y mutaciones del servidor directamente desde una app de Firebase. Generas un SDK cliente personalizado en paralelo a medida que diseñas los esquemas, las consultas y las mutaciones que implementas en tu servicio de Data Connect. Luego, integras los métodos de este SDK en tu lógica de cliente.

Como mencionamos en otro lugar, es importante tener en cuenta que el código cliente no envía las consultas ni las mutaciones de Data Connect, y que estas se ejecutan en el servidor. En cambio, cuando se implementan, las operaciones Data Connect se almacenan en el servidor como Cloud Functions. Esto significa que debes implementar los cambios correspondientes del cliente para evitar afectar a los usuarios existentes (por ejemplo, en versiones anteriores de la app).

Es por eso que Data Connect te proporciona un entorno de desarrollador y herramientas que te permiten crear prototipos de tus esquemas, consultas y mutaciones implementados en el servidor. También genera automáticamente SDKs del cliente, mientras creas tu prototipo.

Cuando hayas iterado las actualizaciones de tu servicio y tus apps cliente, las actualizaciones del servidor y del cliente estarán listas para implementarse.

Genera tu SDK de Flutter

Al igual que con la mayoría de los proyectos de Firebase, el trabajo en el código cliente de Firebase Data Connect se realiza en un directorio de proyecto local. Tanto la extensión de VS Code de Data Connect como la CLI de Firebase son herramientas locales importantes para generar y administrar código de cliente.

Las opciones de generación de SDKs se vinculan a varias entradas del archivo dataconnect.yaml que se generó cuando inicializaste tu proyecto.

Inicializa la generación de SDK

En tu connector.yaml, agrega outputDir, package y (para el SDK web) packageJsonDir.
connectorId: movies
generate:
  dartSdk:
    outputDir: ../../lib/generated # Feel free to change this to a different path
    package: movies

outputDir especifica dónde se debe generar el SDK generado. Esta ruta es relativa al directorio que contiene el archivo connector.yaml. De manera opcional, puedes proporcionar una ruta de acceso absoluta a tu outputDir.

package especifica el nombre del paquete.

Actualiza los SDKs durante el prototipado

Si estás creando prototipos de forma interactiva con la extensión de VS Code de Data Connect y su emulador de Data Connect, los archivos fuente del SDK se generan y actualizan automáticamente mientras modificas los archivos .gql que definen esquemas, consultas y mutaciones. Esta puede ser una función útil en los flujos de trabajo de (re)carga en caliente.

En otras situaciones, si usas el emulador de Data Connect desde la CLI de Firebase, puedes configurar un reloj en las actualizaciones de .gql y hacer que las fuentes del SDK se actualicen automáticamente.

Como alternativa, puedes usar la CLI para volver a generar los SDKs cada vez que se cambien los archivos .gql:

firebase dataconnect:sdk:generate --watch

Genera SDKs para la integración y para las versiones de producción

En algunos casos, como cuando preparas las fuentes de un proyecto para enviarlas a pruebas de CI, puedes llamar a la CLI de Firebase para realizar una actualización por lotes.

En estos casos, usa firebase dataconnect:sdk:generate.

Configura el código del cliente

Inicializa tu app de Data Connect

Primero, inicializa tu app con las instrucciones de configuración estándar de Firebase.

Luego, instala el complemento Data Connect:

flutter pub add firebase_data_connect

Inicializa el SDK de Flutter de Data Connect

Inicializa tu instancia de Data Connect con la información que usaste para configurar Data Connect (todo está disponible en la pestaña Data Connect de la consola de Firebase).

Importa las bibliotecas

Hay dos conjuntos de importaciones necesarias para inicializar tu código cliente: las importaciones generales de Data Connect y las importaciones específicas y generadas del SDK.

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

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

Crea prototipos y prueba tus apps de Flutter

Instrumenta clientes para usar un emulador local

Puedes usar el emulador de Data Connect, ya sea desde la extensión de VS Code de Data Connect o desde la CLI.

La instrumentación de la app para conectarse al emulador es la misma para ambas situaciones.

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

Para cambiar a los recursos de producción, comenta las líneas para conectarte al emulador.

Usa consultas en el lado del cliente

El código generado ya tendrá referencias de consulta predefinidas. Lo único que debes hacer es importarlos y llamar a execute en ellos.

import 'generated/movies.dart';

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

Llama a métodos de consulta del SDK

Este es un ejemplo en el que se usan estas funciones de acceso directo a la acción:

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

Campos opcionales

Algunas consultas pueden tener campos opcionales. En estos casos, el SDK de Flutter expone un método de generador y se deberá configurar por separado.

Por ejemplo, el campo rating es opcional cuando se llama a createMovie, por lo que debes proporcionarlo en la función del compilador.

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

Suscríbete a los cambios

Puedes suscribirte a los cambios (que se actualizarán cada vez que ejecutes una consulta).

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`

Usa mutaciones del lado del cliente

Se puede acceder a las mutaciones de la misma manera que a las consultas.

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

Tipos de datos en el SDK de Dart

El servidor Data Connect representa tipos de datos comunes de GraphQL. Estos se representan en el SDK de la siguiente manera.

Tipo de conexión de datos Dart
Marca de tiempo firebase_data_connect.Timestamp
Int (32 bits) int
Fecha DateTime
UUID string
Int64 int
Número de punto flotante double
Booleano bool
Cualquiera firebase_data_connect.AnyValue