Действия с базой Supabase

Действия Supabase добавляют, добавляют-или-обновляют, изменяют, удаляют и выбирают строки в таблицах.

Кроме действий, для Supabase настраиваются Backend Queries — они подгружают данные сами и держат их свежими через потоковые обновления в реальном времени.

заметка
Что нужно заранее
  • Пройдена настройка Supabase.
  • Создана таблица с полями, с которыми будет работать действие.

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

  • Insert Row — добавляет строку в таблицу.
  • Upsert Row — добавляет строку, а если строка с такими же значениями в колонках конфликта уже есть, обновляет её.
  • Update Row — обновляет строки, подходящие под фильтр.
  • Delete Row — удаляет строки, подходящие под фильтр.
  • Query Rows — выбирает строки по условию.

Insert Row [Действие]

Insert Row нужен, когда строку надо именно создать — всегда новую.

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

  1. Выберите виджет, который будет запускать действие, и откройте Action Flow Editor.
  2. Нажмите + Add Action, найдите и выберите Insert Row.
  3. В поле Table укажите таблицу Supabase, куда добавляется строка.
  4. В секции Set Fields нажмите + Add Field и выберите поле.
  5. Задайте значение напрямую или выберите From Variable, чтобы взять его, например, из состояния виджета.
  6. Повторите шаги 4–5 для остальных полей.
совет
Автоматические значения

Поля, которые база заполняет сама, не трогайте. Так, Supabase сам подставит id, если это identity-колонка, и created_at, если у него значение по умолчанию now().

Upsert Row [Действие]

Upsert Row добавляет новую строку, если в таблице нет строки с такими же значениями в выбранных колонках конфликта. Если такая строка есть, действие её обновляет. Удобно, когда данные надо сохранить, не выясняя сначала запросом, существует запись или нет.

Например, при сохранении задачи колонкой конфликта можно сделать id. Есть задача с таким id — обновятся её поля, нет — появится новая.

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

  1. Выберите виджет, который будет запускать действие.
  2. Откройте Action Flow Editor.
  3. Нажмите + Add Action, найдите и выберите Upsert Row.
  4. В поле Table укажите таблицу Supabase.
  5. В секции Set Fields нажмите + Add Field и задайте значения для вставки или обновления. Значения для каждой колонки конфликта обязательны.
  6. В On Conflict Columns выберите первичный ключ или уникальные колонки, по которым распознаётся существующая строка.
  7. По желанию укажите Action Output Variable Name, чтобы использовать возвращённую строку в следующих действиях.
заметка
Колонки конфликта

Выбранные колонки должны образовывать первичный ключ или уникальное ограничение (unique constraint) в Supabase. Если их значения не совпали ни с одной строкой, действие вставит новую. Подробнее — в документации Supabase по upsert.

совет
Настройте RLS

Upsert может и вставить строку, и обновить, поэтому таблице нужны подходящие политики RLS и на INSERT, и на UPDATE. Если используете результат действия, пользователю также нужно право прочитать возвращённую строку. Как писать политики — в руководстве Supabase по Row Level Security.

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

Update Row меняет одну или несколько существующих строк, подходящих под фильтр.

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

  1. Выберите виджет, который будет запускать действие, и откройте Action Flow Editor.
  2. Нажмите + Add Action, найдите и выберите Update Row.
  3. В поле Table укажите таблицу Supabase.
  4. По желанию включите Return Matching Rows, если обновлённые строки нужны в следующих действиях.
  5. В секции Matching Rows нажмите + Add Filter и заполните Field Name, Relation и Value. Например: Field Nameid, RelationEqual To, Value — идентификатор нужной строки.
  6. В секции Set Fields нажмите + Add Field и задайте новые значения.

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

Delete Row удаляет одну или несколько строк, подходящих под фильтр.

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

  1. Выберите виджет, который будет запускать действие, и откройте Action Flow Editor.
  2. Нажмите + Add Action, найдите и выберите Delete Row.
  3. В поле Table укажите таблицу Supabase, из которой удаляются строки.
  4. По желанию включите Return Matching Rows, если удалённые строки нужны в следующих действиях.
  5. В секции Matching Rows нажмите + Add Filter и заполните Field Name, Relation и Value. Например: Field Nameid, RelationEqual To, Value — идентификатор нужной строки.
осторожно

Какие строки обновятся или удалятся, решает фильтр. Если нужна ровно одна строка, фильтруйте по уникальному полю вроде id.

совет

После удаления можно добавить действие Refresh Database Request, чтобы список на экране обновился.

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

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

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

  1. Выберите виджет, который будет запускать запрос, и откройте Action Flow Editor.
  2. Нажмите + Add Action, найдите и выберите Query Rows.
  3. Выберите таблицу в поле Table.
  4. По желанию добавьте фильтры или сортировку.
  5. Укажите Action Output Variable Name — под этим именем строки будут доступны в следующих действиях.

Использование результата

Полученные строки лежат в Action Outputs. Чтобы показать их в ListView, сгенерируйте динамические дочерние элементы из выходной переменной действия и привяжите виджеты внутри каждого элемента к нужным полям строки.

Фильтрация

Фильтры оставляют только строки, подходящие под условие, — скажем, только выполненные задания.

Чтобы добавить фильтр:

  1. В свойствах действия Query Rows нажмите + Add Filter.
  2. В Field Name выберите колонку, по которой фильтруете.
  3. Выберите Relation.
  4. Задайте Value и нажмите Confirm.
совет

Отношение подбирается под задачу. Например:

  • Equal To — только выполненные задания: Field Nameis_done, RelationEqual To, ValueTrue.
  • Greater Than — только пользователи старше 30: Field Nameage, RelationGreater Than, Value30.
  • Like — адреса с индексом, начинающимся на 35: Field Namezip_code, RelationLike, Value35%. В значении работают подстановочные знаки:
    • Процент (%) — ноль или больше любых символов.
      • 'A%' — любая строка, начинающаяся с 'A' ('Apple', 'Apex').
      • '%A%' — любая строка, содержащая 'A' ('Canada', 'Australia').
    • Подчёркивание (_) — ровно один символ.
      • 'A_' — строки из двух символов, начинающиеся с 'A' ('An', 'At').
      • 'A__' — строки из трёх символов, начинающиеся с 'A' ('Ant', 'Art').
инфо

Несколько фильтров объединяются через AND или OR — так собираются составные условия.

Сортировка

Сортировка возвращает строки в заданном порядке — например, задания по сроку сдачи.

Чтобы задать порядок:

  1. В свойствах действия Query Rows нажмите + Add Order.
  2. В Table Field Name выберите колонку для сортировки.
  3. В Order выберите Increasing или Decreasing и нажмите Confirm.
совет

Чтобы задания с ближайшим сроком шли первыми: Table Field Namedue_date, OrderIncreasing.

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

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

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

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

Работа офлайн

Если приложению на Supabase нужен офлайн-режим, посмотрите библиотеку PowerSync от команды PowerSync. Она держит локальную копию данных Supabase и досинхронизирует её, когда устройство снова выходит в сеть.

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

обновлено · перевод от

ESC