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

Создание подколлекций

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

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

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

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

img_21.png

Первые шаги: что нужно знать

Работа с подколлекциями

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

Вот несколько советов по работе с подколлекциями в FlutterFlow:
  • Вы можете создать документ подколлекции под существующей ссылкой, если определена подколлекция.
  • Вы можете либо указать ссылку для запроса подколлекции (ПользовательА -> избранное), либо выполнить запрос "collectionGroup" по всем подколлекциям (все пользователи -> Избранное), не указывая ссылку.

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

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

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. Нажмите Создать.

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

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

Добавьте некоторые стандартные данные о чат-комнатах с помощью Менеджера контента Firestore.

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

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

Шаги по созданию страницы чат-комнат:

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

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

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

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

Шаги по созданию страницы сообщений:

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

img_24.png

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

  1. При нажатии кнопки "Отправить" добавьте действие создания документа для коллекции messages и предоставьте текущую ссылку chat_rooms. Кроме того, укажите сообщение для добавления через From Variable > Widget State > [ИмяТекстовогоПоля].