Используйте сгенерированные SDK Flutter.

Клиентские SDK Firebase Data Connect позволяют вызывать запросы и изменения на стороне сервера непосредственно из приложения Firebase. Пользовательский клиентский SDK создается параллельно с разработкой схем, запросов и изменений, которые вы развертываете в службе Data Connect . Затем вы интегрируете методы из этого SDK в свою клиентскую логику.

Как мы уже упоминали, важно отметить, что запросы и изменения Data Connect не отправляются клиентским кодом и не выполняются на сервере. Вместо этого при развертывании операции Data Connect сохраняются на сервере, как и облачные функции. Это означает, что вам необходимо развернуть соответствующие изменения на стороне клиента, чтобы не нарушать работу существующих пользователей (например, в старых версиях приложения).

Вот почему Data Connect предоставляет вам среду разработки и инструменты, которые позволяют создавать прототипы схем, запросов и мутаций, развернутых на сервере. Он также автоматически генерирует клиентские SDK во время создания прототипа.

После повторного обновления служб и клиентских приложений обновления как на стороне сервера, так и на стороне клиента готовы к развертыванию.

Создайте свой Flutter SDK

Как и в большинстве проектов Firebase, работа над клиентским кодом Firebase Data Connect происходит в локальном каталоге проекта. И расширение Data Connect VS Code, и интерфейс командной строки Firebase являются важными локальными инструментами для создания клиентского кода и управления им.

Параметры создания SDK привязаны к нескольким записям в файле dataconnect.yaml , созданном при инициализации проекта.

Инициализировать создание SDK

В файл connector.yaml добавьте outputDir , package и (для веб-SDK) packageJsonDir .
connectorId: movies
generate:
  dartSdk:
    outputDir: ../../lib/generated # Feel free to change this to a different path
    package: movies

outputDir указывает, куда должен выводиться сгенерированный SDK. Этот путь указывается относительно каталога, содержащего сам файл connector.yaml . При желании вы можете указать абсолютный путь к вашему outputDir .

package указывает имя пакета.

Обновляйте SDK во время прототипирования

Если вы создаете прототипы в интерактивном режиме с помощью расширения Data Connect VS Code и его эмулятора Data Connect , исходные файлы SDK автоматически генерируются и обновляются, пока вы изменяете файлы .gql , определяющие схемы, запросы и мутации. Это может быть полезной функцией в рабочих процессах горячей (повторной) загрузки.

В других сценариях, если вы используете эмулятор Data Connect из интерфейса командной строки Firebase , вы можете настроить наблюдение за обновлениями .gql , а также автоматически обновлять источники SDK.

Альтернативно вы можете использовать CLI для повторного создания SDK при каждом изменении файлов .gql:

firebase dataconnect:sdk:generate --watch

Создание SDK для интеграции и производственных выпусков.

В некоторых сценариях, например при подготовке источников проекта к отправке на CI-тесты, вы можете вызвать интерфейс командной строки Firebase для пакетного обновления.

В этих случаях используйте firebase dataconnect:sdk:generate .

Настройка клиентского кода

Инициализируйте приложение Data Connect

Сначала инициализируйте свое приложение, используя стандартные инструкции по настройке Firebase .

Затем установите плагин Data Connect :

flutter pub add firebase_data_connect

Инициализация SDK Data Connect Flutter

Инициализируйте экземпляр Data Connect , используя информацию, которую вы использовали для настройки Data Connect (все доступно на вкладке Data Connect консоли Firebase ).

Импортировать библиотеки

Для инициализации клиентского кода необходимы два набора импортов: общий импорт Data Connect и специальный импорт, созданный SDK.

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

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

Создайте прототип и протестируйте свои приложения Flutter

Инструментизация клиентов для использования локального эмулятора

Вы можете использовать эмулятор Data Connect как из расширения Data Connect VS Code, так и из CLI.

Инструментирование приложения для подключения к эмулятору одинаково для обоих сценариев.

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

Для перехода к производственным ресурсам закомментируйте строки подключения к эмулятору.

Используйте запросы на стороне клиента

Сгенерированный код уже будет содержать предопределенные ссылки на запросы. Все, что вам нужно сделать, это импортировать и вызвать их execute .

import 'generated/movies.dart';

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

Вызов методов запроса SDK

Вот пример использования этих функций быстрого доступа к действиям:

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

Необязательные поля

Некоторые запросы могут иметь необязательные поля. В этих случаях Flutter SDK предоставляет метод компоновщика, и его нужно будет настроить отдельно.

Например, поле rating не является обязательным при вызове createMovie , поэтому вам необходимо указать его в функции компоновщика.

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

Подписаться на изменения

Вы можете подписаться на изменения (которые будут обновляться каждый раз при выполнении запроса).

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`

Используйте мутации на стороне клиента

Мутации доступны так же, как и запросы.

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

Типы данных в Dart SDK

Сервер Data Connect представляет распространенные типы данных GraphQL. В SDK они представлены следующим образом.

Тип подключения данных Дарт
Временная метка firebase_data_connect.Timestamp
Целое (32-битное) интервал
Дата ДатаВремя
UUID нить
Int64 интервал
Плавать двойной
логическое значение логическое значение
Любой firebase_data_connect.AnyValue