Давайте рассмотрим, как можно использовать пользовательские типы данных в документах Firestore на примере. Представьте, что у вас есть приложение, в котором пользователи могут вводить свои адресные данные. Мы можем создать пользовательский тип данных ‘address’, чтобы хранить эти адресные поля в структурированном виде.

Вот как это выглядит в готовом виде:

кас 1

Ниже приведены шаги по созданию такого примера:

  • Создайте пользовательский тип данных с именем ‘адрес’.
  • Чтобы использовать пользовательский тип данных в документе Firestore, необходимо создать новое поле внутри коллекции и присвоить ему пользовательский тип данных. Для данного примера создадим новое поле в коллекции «Пользователи».
кас 2
  • Постройте страницу, имеющую следующий вид:
кас 3
  • Для хранения значений TextField внутри поля ‘адрес’ можно добавить действие, создающее или обновляющее документ. Допустим, необходимо обновить данные об адресе вошедшего в систему пользователя. Вот как это делается:
    • Выберите виджет (т.е. кнопку «сохранить изменения») и добавьте действие «Обновить документ».
    • Для пользователей, вошедших в систему, коллекция ‘пользователь’ доступна через меню Set Variable > Authenticated User, и вы должны указать ее ссылку для обновления. Поэтому можно выбрать ссылку для обновления через меню Set Variable > Authenticated User > User Reference.
      • Совет: Если необходимо сохранить данные в коллекции, отличной от ‘пользователь’, убедитесь, что у вас есть доступ к документу, а затем укажите ссылку через меню Set Variable > [имя_коллекции] Document > Reference.
    • В разделе Задать поля нажмите на кнопку + Добавить поле. Щелкайте, пока не увидите поле, в котором хранится пользовательский тип данных.
    • Выберите Установить/Обновить [DataTypeName] (например, ‘Установить адрес’, ‘Обновить адрес’). Откроется всплывающее окно с левой стороны.
    • Если вы хотите удалить существующие подполя из документа и добавить только поля, указанные здесь, включите опцию Clear Unspecified Values. Чтобы сохранить существующие подполя и обновить значения для указанных здесь полей, отключите эту опцию.
    • Для параметра Update Type можно выбрать следующие варианты:
      • Выбрать Set Individual Fields для обновления каждого поля отдельно.
      • Выберите Set From Variable (Установить из переменной), чтобы установить его непосредственно из другой переменной того же типа данных.
      • Выберите Удалить, чтобы удалить это поле из документа.
    • Для данного примера установите для параметра Update Type значение Set Individual Fields. Теперь необходимо указать поля (переменные внутри пользовательского типа данных). Для этого нажмите на кнопку + Add Fields и укажите поля обычным образом (например, установите для Value Source значение From Variable, а затем UNSET -> Widget State -> TextFieldName).
    • Нажмите кнопку Готово и затем Закройте.

Видео:https://www.loom.com/share/1018b0280452406bbdf6a76e59e257b0?sid=d5867802-7209-490d-a177-485e72fa174e

  • Для отображения значений из пользовательского типа данных в любом виджете:
    • Во-первых, убедитесь, что у вас есть доступ к документу, в котором есть поле с пользовательским типом данных. В данном примере мы храним данные об адресах в коллекции ‘Пользователь’ и можем напрямую получить доступ к документу для вошедших в систему пользователей через меню Set Variable > Authenticated User.
      • Совет: Если вы храните данные в коллекции, отличной от ‘Пользователь’, вы должны запросить документ на странице или в любом виджете верхнего уровня.
    • Выберите виджет, позволяющий задать значение из переменной.
    • Здесь можно выбрать Документ. Чтобы отобразить адрес вошедшего в систему пользователя, выберите меню Set Variable > Authenticate User > [FieldName] (т.е. поле адреса).
      • Выберите поле, которое вы хотите отобразить в данном текстовом поле.
      • Нажмите кнопку Подтвердить.

Видео:https://www.loom.com/share/83aaf857b56e4d929c4d1e668ac783e9?sid=36c6d06e-3ec0-411c-8ee7-26d5a35f40da

Пример проекта

Демонстрируемые здесь страницы находятся в папке ‘Firebase’ этого примера проекта.