Создание подколлекций
Коллекции, созданные внутри документа, называются подколлекциями. Например, вы можете иметь подколлекцию 'comments' внутри коллекции 'posts' для хранения комментариев к посту.
Подколлекция представляет собой лучший вариант, когда у вас есть несколько запросов/фильтров или поиск внутри коллекции на основе другой коллекции. Например, загрузка или поиск комментариев к конкретному посту (например, показать все комментарии к посту с наибольшим количеством лайков).
В настоящее время FlutterFlow поддерживает один уровень вложенности (например, коллекция -> подколлекция). Второй уровень вложенности в настоящее время не поддерживается (например, коллекция -> подколлекция 1 -> подколлекция 2).
- Ознакомьтесь с тем, как структурировать базу данных Firebase.
- Убедитесь, что вы прошли и выполнили каждый шаг в Настройке Firebase для вашего проекта.
Работа с подколлекциями
В этом разделе вы узнаете, как работать с подколлекциями, создав пример, который позволит вам видеть все сообщения и отправлять новое сообщение в чате (пример ниже).
- Вы можете создать документ подколлекции под существующей ссылкой, если определена подколлекция.
- Вы можете либо указать ссылку для запроса подколлекции (ПользовательА -> избранное), либо выполнить запрос "collectionGroup" по всем подколлекциям (все пользователи -> Избранное), не указывая ссылку.
Прежде чем мы начнем, нам нужно определить коллекции и структуру базы данных. Исходя из требований, очевидно, что нам понадобятся две коллекции. Одна для хранения деталей чат-комнат и другая для хранения их сообщений. И нам нужно отображать сообщения только для определенной чат-комнаты. Таким образом, имея коллекцию сообщений в виде подколлекции чат-комнат, кажется хорошим вариантом.
Вот как выглядит структура базы данных:
Построение примера чат-комнаты включает в себя следующие шаги:
- Создание коллекции
- Создание подколлекции
- Добавление данных в коллекцию
- Построение страницы списка чат-комнат
- Построение страницы сообщений
1. Создание коллекции
Создайте коллекцию с именем chat_rooms. Она будет использоваться для хранения деталей чат-комнат. При определении схемы для коллекции chat_rooms добавьте поля для отображения ее имени, например, chat_room_name.
2. Создание подколлекции
Чтобы создать подколлекцию:
-
Нажмите на Firestore в меню навигации (левая часть вашего экрана).
-
Нажмите на кнопку (+) Плюс.
-
Появится всплывающее окно; введите имя коллекции как 'messages.'
-
Включите переключатель Is Subcollection.
-
Появится список существующих коллекций. Нажмите на Unset и выберите родительскую коллекцию, chat_rooms в данном случае.
-
Нажмите Создать.
-
Затем определите схему документа. При определении схемы для подколлекции 'messages' добавьте поля, такие как message (для хранения текста сообщения) и from (для хранения имени отправителя).
3. Добавление данных в коллекцию
Добавьте некоторые стандартные данные о чат-комнатах с помощью Менеджера контента Firestore.
4. Построение страницы списка чат-комнат
Первая страница показывает список чат-комнат, и при нажатии открывается новая страница и отображаются все сообщения.
Шаги по созданию страницы чат-комнат:
-
Запросите коллекцию chat_rooms и отобразите названия чат-комнат в ListTile (внутри ListView).
-
Добавьте действие Перейти к при нажатии на ListTile и откройте страницу сообщений. Примечание: При навигации передавайте запись чат-комнаты на следующую страницу. Узнайте, как передавать данные на следующую страницу.
5. Построение страницы сообщений
На следующей странице отображаются все сообщения и можно отправлять сообщения в чат-комнату.
Шаги по созданию страницы сообщений:
- Используйте виджеты ListView, ListTile, TextField и Button для создания страницы, похожей на изображенную ниже:
- В ListView запросите подколлекцию, как вы запрашивали бы любую другую коллекцию; за исключением подколлекции, вам необходимо предоставить ссылку на ее родительскую коллекцию (в данном с лучае ссылка на chat_rooms). Таким образом, вы увидите только сообщения из этой конкретной чат-комнаты.
- При нажатии кнопки "Отправить" добавьте действие создания документа
для
коллекции
messages
и предоставьте текущую ссылкуchat_rooms
. Кроме того, укажите сообщение для добавления через From Variable > Widget State > [ИмяТекстовогоПоля].