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

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

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

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

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

Каков рабочий процесс развития клиента?

Если вы следовали Get started , вы познакомились с общим процессом разработки для Data Connect . В этом руководстве вы найдете более подробную информацию о создании Flutter SDK из вашей схемы и работе с клиентскими запросами и мутациями.

Подводя итог, для использования сгенерированных Flutter SDK в клиентских приложениях вам необходимо выполнить следующие предварительные действия:

  1. Добавьте Firebase в свое приложение Flutter .
  2. Установите flutterfire CLI dart pub global activate flutterfire_cli .
  3. Запустите flutterfire configure .

Затем:

  1. Разработайте схему своего приложения.
  2. Настройте генерацию SDK:

  3. Инициализируйте клиентский код и импортируйте библиотеки .

  4. Реализовать вызовы запросов и мутаций .

  5. Настройте и используйте эмулятор Data Connect и повторите попытку.

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

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

Параметры генерации 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 CLI, вы можете установить отслеживание обновлений .gql , а также автоматически обновлять исходные коды SDK.

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

firebase dataconnect:sdk:generate --watch

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

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

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

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

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

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

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

flutter pub add firebase_data_connect

Инициализируйте SDK Flutter Data Connect

Инициализируйте свой экземпляр 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';

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

Сгенерированный код уже будет содержать предопределенные Query Refs. Все, что вам нужно сделать, это импортировать и вызвать 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();

Создавайте прототипы и тестируйте свои приложения 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();

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

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

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

Тип подключения данных Дарт
Временная метка firebase_data_connect.Отметка времени
Целое (32-битное) инт
Дата ДатаВремя
UUID нить
Int64 инт
Плавать двойной
Булев бул
Любой firebase_data_connect.ЛюбоеЗначение