Перейти к основному содержимому

Создание вложенных коллекций

Коллекции, которые создаются внутри документа, называются вложенными коллекциями. Например, вы можете иметь вложенную коллекцию 'comments' внутри коллекции 'posts' для хранения комментариев к посту.

Вложенная коллекция подходит лучше всего, когда у вас есть несколько запросов/фильтров или поиск по коллекции на основе другой коллекции. Например, загрузка или поиск комментариев к конкретному посту (т. е. показ всех комментариев к посту с большим количеством лайков).

Завершение функции

На данный момент FlutterFlow поддерживает один уровень вложенности (например, коллекция -> вложенная коллекция). Вложенность второго уровня пока не поддерживается (например, коллекция -> вложенная коллекция 1 -> вложенная коллекция 2).

img_21.png

Начало работы: Что нужно знать сначала

Работа с вложенными коллекциями

В этом разделе вы узнаете, как работать с вложенными коллекциями, построив пример, который позволит вам просматривать все сообщения и отправлять новое сообщение в чат-комнате (пример ниже).

Вот несколько советов о том, как работают вложенные коллекции в FlutterFlow:
  • Вы можете создать документ вложенной коллекции под существующей ссылкой, если определена вложенная коллекция.
  • Вы можете либо указать ссылку для запроса к вложенной коллекции (UserA -> favorites), либо выполнить запрос «collectionGroup» по всем вложенным коллекциям (все Users -> Favorites), не указывая ссылку.

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

Вот как выглядит структура базы данных:

img_22.png

Построение примера чат-комнаты включает следующие шаги:

  1. Создание коллекции
  2. Создание вложенной коллекции
  3. Добавление данных в коллекцию
  4. Построение страницы списка чат-комнат
  5. Построение страницы сообщений

1. Создание коллекции

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

img_23.png

2. Создание вложенной коллекции

Чтобы создать вложенную коллекцию:

  1. Нажмите на Firestore в меню навигации (слева на экране).

  2. Нажмите на кнопку (+) с плюсом.

  3. Появится всплывающее окно; введите имя коллекции 'messages.'

  4. Включите переключатель Is Subcollection.

  5. Появится список существующих коллекций. Нажмите на Unset и выберите родительскую коллекцию, в данном случае chat_rooms.

  6. Нажмите кнопку Create.

  7. Далее определите схему документа. При определении схемы для вложенной коллекции 'messages' добавьте поля, такие как message (для хранения тела сообщения) и from (для хранения имени отправителя).

3. Добавление данных в коллекцию

Добавьте некоторые стандартные детали чат-комнаты с помощью Firestore Content Manager.

4. Построение страницы списка чат-комнат

Первая страница показывает список чат-комнат, и при нажатии открывается новая страница с отображением всех сообщений.

Шаги по построению страницы чат-комнат следующие:

  1. Выполните запрос к коллекции chat_rooms и отобразите имена чат-комнат в ListTile (внутри ListView).

  2. Добавьте действие Navigate To on Tap для ListTile и откройте страницу сообщений. Примечание: При навигации передайте запись чат-комнаты на следующую страницу. Узнайте, как передавать данные на следующую страницу. .

5. Построение страницы сообщений

Следующая страница показывает все сообщения и позволяет отправлять сообщения в чат-комнате.

Шаги по построению страницы чат-комнат следующие:

  1. Используйте виджеты ListView, ListTile, TextField и Button для создания страницы, которая выглядит так:

img_24.png

  1. В ListView выполните запрос к вложенной коллекции так же, как к любой другой коллекции; за исключением того, что для вложенной коллекции вы должны указать ссылку на родительскую коллекцию (т. е. ссылку на chat_rooms в данном случае). Таким образом, вы увидите сообщения только из этой конкретной чат-комнаты.

  1. При нажатии на кнопку 'Send' добавьте действие create document для коллекции messages и укажите текущую ссылку chat_rooms. Также укажите сообщение для добавления через From Variable > Widget State > [TextFieldName].