Действие Firestore позволяет создать, обновить или удалить запись из коллекции Firestore.

Предварительные условия
Прежде чем приступить к изучению этого раздела:
Ознакомьтесь со структурированием базы данных Firebase.
Выполните все шаги в разделе Firebase Setup для вашего проекта.
Создайте коллекцию.
Типы действий с базой данных
Существует три типа действий, которые можно выполнить над документом Firestore.
- Создать документ: Создает новую запись внутри указанной коллекции Firestore.
- Обновить документ: Обновляет значение указанного поля существующего документа.
- Удалить документ: Удаляет запись внутри указанной коллекции Firestore Collection.
1. Определение действия «Создать документ
Перейдите на страницу вашего проекта на FlutterFlow и выполните следующие шаги, чтобы определить действие для любого виджета.
- Выберите виджет (например, кнопку), для которого вы хотите определить действие.
- Выберите Действия на панели свойств (правое меню) и нажмите Открыть. Это откроет редактор потока действий в новом всплывающем окне.
- Нажмите + Добавить действие.
- В правой части найдите и выберите действие Firestore, а затем выберите Create Record.
- Установите Коллекцию на имя вашей коллекции (например, todo).
- В разделе Задать поля нажмите на кнопку + Поле.
- Щелкните на имени поля.
- Прокрутите вниз, чтобы найти выпадающий список Источник значения и измените его на Из переменной.
- Найдите выпадающий список Source и измените его на Widget State.
- Найдите выпадающий список Available Options и установите его на Name of the TextField.
- Аналогичным образом добавьте поле для других элементов пользовательского интерфейса, таких как описание и дата.

Теперь, когда пользователь нажимает кнопку Добавить при запуске приложения, оно создаст документ в коллекции.

2. Определение действия «Обновить документ
Перейдите на страницу вашего проекта на FlutterFlow и выполните следующие шаги, чтобы определить действие для любого виджета.
- Выберите виджет (например, кнопку), для которого вы хотите определить действие.
- Выберите Действия на панели свойств (правое меню) и нажмите Открыть. Это откроет редактор потока действий в новом всплывающем окне.
- Нажмите + Добавить действие.
- В правой части найдите и выберите действие Firestore -> Update Record.
- Установите Источник на Имя параметра, в котором хранится запись.
- Чтобы обновить конкретный документ в коллекции Firebase, необходимо указать ссылку на этот документ. Ссылка действует как указатель на конкретный документ, который вы хотите обновить. Поэтому установите для параметра Доступные параметры значение Ссылка.
- В разделе Задать поля нажмите на кнопку + Добавить поле.
- Щелкните на имени поля.
- Прокрутите вниз, чтобы найти выпадающий список Источник значения и измените его на Из переменной.
- Найдите выпадающий список Source и измените его на Widget State.
- Найдите выпадающий список Available Options и установите его на Name of the TextField.
- Аналогичным образом добавьте поле для других элементов пользовательского интерфейса, таких как описание и дата.

Следующий визуальный пример демонстрирует обновление записи:

3. Определение действия Удалить документ
Перейдите на страницу вашего проекта на FlutterFlow и выполните следующие шаги, чтобы определить действие для любого виджета.
- Выберите виджет (например, кнопку), для которого вы хотите определить действие.
- Выберите Действия на панели свойств (правое меню) и нажмите Открыть. Это откроет редактор потока действий в новом всплывающем окне.
- Нажмите + Добавить действие.
- В правой части найдите и выберите действие Firestore -> Delete Record.
- Установите Источник на [коллекция] Запись (из ListView).
- Установите для параметра Доступные параметры значение Ссылка.
- Нажмите Закрыть.

Следующая иллюстрация демонстрирует удаление записи:

4. Сбор запросов
Существуют определенные сценарии, в которых запрос к коллекции необходимо выполнять вручную. Например, необходимо получать данные только в ответ на определенное действие пользователя, такое как нажатие кнопки или отправка формы.
Кроме того, если ваше приложение получает различные данные при разных условиях, то, возможно, вам будет удобнее вызывать запросы вручную. Например, получение разных задач для администратора и членов команды.
Чтобы вручную запросить коллекцию, выполните следующие действия и определите это действие для любого виджета:
- Выберите виджет (например, кнопку), для которого необходимо задать действие.
- На панели свойств (правое меню) выберите пункт Действия и нажмите кнопку Открыть. В новом всплывающем окне откроется редактор потока действий.
- Нажмите на кнопку + Добавить действие.
- В правой части найдите и выберите действие Firestore > Query Collection.
- Выберите коллекцию, к которой требуется выполнить запрос.
- Выберите тип запроса: список документов, отдельный документ или подсчет.
- Можно также фильтровать и упорядочивать результаты запроса.
- Укажите имя выходной переменной действия. Она будет использоваться для хранения результатов запроса.
Видео:https://www.loom.com/share/f416df1ad705467780a389c6381eae77?sid=46d60a9b-956e-4e60-bd3b-4f57d85c9eb5
- Теперь вы можете использовать имя переменной Action Output, указанное в предыдущем шаге, для генерации дочерних элементов из переменной в Список.
- Наконец, можно отобразить данные в виджете Text. Для этого выберите виджет Text > Панель свойств > Текст > меню Set from Variable > пункт [children_from_variable_name] > выберите поле, которое вы хотите отобразить.
Видео:https://www.loom.com/share/7aa25a24385c4d4e80ec5d48d29465d4?sid=72e235ee-1bbd-49c1-80f9-6fa8a41b402e
Для получения большего контроля можно использовать условные действия для запуска определенных действий на основе определенных условий. Например, рассмотрим пример со строкой поиска, вызывающей различные действия коллекции запросов. Если пользователь вводит значение, к коллекции можно применить фильтр для получения соответствующих результатов. С другой стороны, если строка поиска пуста, можно получить полный список элементов.

На следующем рисунке показан пример поиска с использованием этого действия:

Включение пакетной записи в Firestore
При работе с базами данных часто возникает необходимость создания, обновления или удаления данных. Как правило, для каждой операции необходимо посылать отдельные запросы к базе данных, что требует многократных обращений к серверу. Это может занимать много времени и быть неэффективным.
Включив пакетную запись в Firestore, можно сгруппировать несколько операций и отправить их в базу данных в виде одного запроса. При этом либо все операции в пакете будут выполнены успешно, либо ни одна из них не будет применена. Это гарантирует согласованность данных и исключает возможность неполного обновления состояния, если в процессе выполнения операции что-то пойдет не так.
- Вы можете узнать больше о пакетной записи в Firestore.
- Если вы новичок, рекомендуем сначала посмотреть это видео.
Предположим, что у вас есть приложение электронной коммерции, и после успешного выполнения заказа вам необходимо обновить данные о количестве товаров на складе и создать новый документ в коллекции ‘orders’. Используя пакетную запись, можно объединить эти операции и выполнить их вместе, чтобы обеспечить согласованность данных.
Чтобы включить пакетную запись Firestore, необходимо иметь несколько действий Firestore (в любой комбинации); в редакторе действий, в правом верхнем углу, включите опцию Batch Firestore Writes.

Триггерные действия при изменении данных
Иногда требуется запускать действие при изменении данных в коллекции. Например, в новостном приложении необходимо уведомлять пользователей о появлении новых новостей следующим образом:
Видео:https://www.loom.com/share/238400b5445b444db712f492584b0d6e?sid=fdf64a10-afd6-4bb2-8d6e-71aea8ca08bb
Для этого:
- Убедитесь, что на виджете с отключенной функцией Single Time Query добавлены Query Collection или Document from Refrence.
- Теперь выберите виджет, перейдите в раздел Actions (Действия) и нажмите + Add Action (Добавить действие).
- Выберите вкладку On Data Change (При изменении данных). Это означает, что действия, добавленные на этой вкладке, будут вызываться при каждом изменении данных.
- Теперь здесь можно добавить любое действие.
- Действия будут выполняться при каждом добавлении, обновлении или удалении данных.
- Если вы добавляете это в ListView, убедитесь, что отключили бесконечную прокрутку.
Приведем пример, показывающий сообщение snackbar при изменении данных в коллекции.

Ссылки
FlutterFlow использует пакет cloud_firestore для взаимодействия с базой данных Firestore, чтобы узнать больше о том, как выполняются CRUD-операции с помощью этого пакета, ознакомьтесь с его документацией.
Если вы хотите перейти на другую страницу приложения после завершения действия вызова бэкенда, используйте действие Navigate. Ознакомьтесь с этой страницей, чтобы узнать, как добавить несколько действий.