Действия Firestore

Действия Firestore создают, читают, изменяют и удаляют записи в коллекциях.

инфо
Что нужно заранее

Какие бывают действия

  1. Create Document — создаёт запись в коллекции.
  2. Read Document — читает документ по ссылке.
  3. Update Document — обновляет поля существующего документа.
  4. Delete Document — удаляет запись.
  5. Query Collection — выбирает записи из коллекции.

Create Document [Действие]

  1. Выберите виджет — например, кнопку.
  2. В Properties Panel справа откройте Actions и нажмите Open — откроется Action Flow Editor.
  3. Нажмите + Add Action.
  4. Справа найдите и выберите Firestore > Create Document.
  5. В поле Collection укажите коллекцию.
  6. В секции Set Fields нажмите + Add Field.
  7. Откройте поле, чтобы взять значение из виджета:
    • в Value Source выберите From Variable;
    • нажмите UNSET и выберите Widget State > имя нужного TextField.
  8. Так же добавьте остальные поля.
  9. По умолчанию у документа генерируется случайный ID. Нужен свой — включите тумблер Custom ID.

Read Document [Действие]

Иногда данные документа нужны в ответ на действие пользователя — скажем, показать имя, аватар и описание профиля после нажатия кнопки.

Где ещё это пригодится:

  • подгрузить данные автора поста или комментария;
  • получить название, цену и наличие товара по ID из корзины;
  • в приложении для путешествий — раскрыть города, на которые ссылается документ страны.

Разберём на примере: показываем данные пользователей, оставивших отзыв о месте.

Коллекции устроены так:

Схема коллекций с отзывами и пользователями

Как добавить действие:

  1. Выберите виджет — например, кнопку.
  2. В Properties Panel справа откройте Actions и нажмите Open.
  3. Нажмите + Add Action.
  4. Справа найдите и выберите Firestore > Read Document.
  5. В Select Reference to Read укажите ссылку на документ.
  6. Задайте Action Output Variable Name — в неё попадут данные документа.

  1. Теперь по этой переменной выводят данные. Например, для текста: Text > Properties Panel > Text > Set from Variable > [имя переменной] > нужное поле.

Update Document [Действие]

  1. Выберите виджет — например, кнопку.
  2. В Properties Panel справа откройте Actions и нажмите Open.
  3. Нажмите + Add Action.
  4. Справа найдите и выберите Firestore > Update Document.
  5. Укажите ссылку на документ — она и определяет, какую именно запись обновлять.
  6. В секции Set Fields нажмите + Add Field.
  7. Откройте поле, чтобы взять значение из виджета:
    1. в Value Source выберите From Variable;
    2. нажмите UNSET и выберите Widget State > имя нужного TextField.
  8. Так же добавьте остальные поля.

Delete Document [Действие]

  1. Выберите виджет — например, кнопку.
  2. В Properties Panel справа откройте Actions и нажмите Open.
  3. Нажмите + Add Action.
  4. Справа найдите и выберите Firestore > Delete Document.
  5. Укажите ссылку на документ, который нужно удалить.

Query Collection [Действие]

Запрос вручную нужен там, где данные забирают в ответ на конкретное действие — нажатие кнопки, отправку формы. То же самое, когда приложение под разными условиями показывает разные данные: скажем, отдельные наборы задач для администратора и для участников команды.

  1. Выберите виджет — например, кнопку.
  2. В Properties Panel справа откройте Actions и нажмите Open.
  3. Нажмите + Add Action.
  4. Справа найдите и выберите Firestore > Query Collection.
  5. Выберите Collection.
  6. Задайте Query Type:
    • List of Documents — список документов, который можно отфильтровать и отсортировать.
    • Single Document — один документ, обычно по его идентификатору.
    • Count — только количество подходящих документов, без самих данных. Быстрый способ узнать, сколько записей попадает под фильтр.
  7. При необходимости задайте фильтры и сортировку.
  8. Укажите Action Output Variable Name — в эту переменную попадёт результат.

  1. По этой переменной можно построить элементы ListView через generate children from variable.
  2. Осталось вывести данные: Text > Properties Panel > Text > Set from Variable > [имя переменной] > нужное поле.

Фильтрация

Фильтр отбирает документы по условию — например, только незавершённые задачи в общем списке.

  1. В свойствах действия Query Collection пролистайте вниз и нажмите + Filter.
  2. В Field Name нажмите Unset и выберите поле, по которому фильтруете.
  3. В выпадающем списке Relation выберите отношение.
  4. Задайте Value и нажмите Confirm.
инфо
  • Отношение подбирают под задачу. Показать только незавершённые задачи: поле isDone, отношение Equal To, значение False.
  • Показать пользователей старше 30: поле Age, отношение Greater Than, значение 30.
  • Несколько фильтров объединяются операторами AND и OR — так собираются более сложные условия.

Сортировка

Порядок задаётся там же — скажем, задачи по сроку выполнения.

  1. В свойствах действия Query Collection пролистайте вниз и нажмите + Order By.
  2. В Field Name нажмите Unset и выберите поле сортировки.
  3. В выпадающем списке Order выберите Increasing или Decreasing и нажмите Confirm.
инфо

Чтобы задачи шли по сроку, поставьте Field Name — поле с датой, Order — Increasing.

внимание

Если в запросе одновременно есть фильтрация и сортировка, нужен индекс — без него FlutterFlow выдаст ошибку. Как выкатить индексы.

Пакетная запись

Обычно каждая операция с базой — отдельный запрос и отдельный поход на сервер. Пакетная запись собирает несколько операций в один запрос: либо выполняются все, либо ни одна. Данные не остаются в наполовину обновлённом состоянии, если что-то пошло не так.

совет

Пример: в интернет-магазине после оформления заказа нужно уменьшить остаток товара и создать документ в коллекции «orders». Пакетная запись выполнит обе операции разом.

Включается она так: соберите в одном потоке несколько действий Firestore — в любом сочетании — и включите Batch Firestore Writes в правом верхнем углу редактора действий.

Тумблер Batch Firestore Writes в редакторе действий

Включение пакетной записи

Реакция на изменение данных

Действие можно запускать в момент изменения данных в коллекции. Например, в новостном приложении — показывать уведомление о свежей публикации:

Как это настроить:

  1. Убедитесь, что к виджету добавлен Query Collection или Document from Reference с выключенной опцией Single Time Query.
  2. На этом виджете откройте Action Flow Editor и выберите триггер On Data Change. Теперь действия сработают при любом добавлении, изменении или удалении данных.
  3. Добавьте нужное действие — показать уведомление, обновить интерфейс, подтянуть связанные данные.
инфо

На ListView вместе с этим триггером отключите Infinite Scroll.

перевод официальной документации FlutterFlow

обновлено

⌕ ESC