Потоки (ChatFlows)
Ниже — все 8 потоков ChatFlows, доступных для переопределения. Внутренние свойства каждого потока описаны в KDoc; в публичный контракт входят только сами flow-классы и их публичные var/val поля. Для бо́льшей кастомизации используйте ChatComponents (Компоненты). Часть параметров ChatConfig управляется серверной конфигурацией — см. Известные ограничения.
ChatFlows — это третий уровень дизайн-системы (после токенов и компонентов). Если ChatComponents определяет глобальные стили UI-элементов, то ChatFlows позволяет переопределить их только на одном экране — например, поменять фон только в галерее, не трогая основной чат.
Концепция
ChatColors / ChatImages / ChatTypography ← токены (атомарные значения)
│
▼
ChatComponents ← стили компонентов (глобально)
│
▼
ChatFlows.{chatFlow, searchFlow, …} ← стили на конкретном экране
Приоритет применения: ChatFlows > ChatComponents > ChatColors/ChatImages/ChatTypography. На практике это работает за счёт порядка инициализации (снизу вверх): токены → ChatComponents → ChatFlows. После создания ChatFlows flow-объекты живут независимо: изменения в ChatComponents уже не подхватываются автоматически — кастомизируйте flow-поля напрямую.
Полный список потоков
Поле ChatFlows | Тип | Экран / контекст |
|---|---|---|
chatFlow | ChatFlow | Основной экран чата: сообщения, ввод, тулбар, приветствие, статусы, pushи |
searchFlow | SearchFlow | Экран поиска по истории: панель поиска, лоадер, кнопка очистки |
galleryFlow | GalleryFlow | Список «Медиа и файлы» — превью изображений |
filesFlow | FilesFlow | Список «Медиа и файлы» — секция файлов: имена, размеры, даты, иконки |
imageFlow | ImageFlow | Полноэкранный просмотр изображения: фон, заголовок, тулбар |
popupsFlow | PopupsFlow | Всплывающие окна и alert-диалоги: заголовки, текст, фон |
balloonsChatStyle | BalloonsChatStyle | Toast/Snackbar-уведомления: текст, фон |
bottomMenuChatFlow | BottomMenuChatFlow | Меню вложений: кнопки камеры, файлов, галереи |
Все 8 flow-классов — data class, и copy() на них работает для частичного переопределения с сохранением defaults.
copy() на самом ChatFlowsChatFlows тоже объявлен как data class, но все 8 flow-полей внутри него — lateinit var вне primary-конструктора и инициализируются в init-блоке из ChatComponents. Поэтому ChatFlows.copy() не сохранит ваши изменения — поля будут заново пересозданы из компонентов. Всегда кастомизируйте через apply { ... } и copy() на отдельных flow-объектах — как в примерах ниже.
BottomInputChatFlowВ публичном API остаётся класс BottomInputChatFlow — он помечен @Deprecated ради бинарной совместимости и не используется в текущем SDK. Для меню вложений работайте только с BottomMenuChatFlow.
Базовая кастомизация
val components = ChatComponents(applicationContext, colors = yourColors)
val flows = ChatFlows(components).apply {
// Кастомизация поиска
// Примечание: SearchFlow.backgroundColor по умолчанию null — фон поиска
// наследуется из чата. Задайте явный цвет, чтобы перекрыть.
searchFlow = searchFlow.copy(
backgroundColor = R.color.your_search_bg
)
// Кастомизация полноэкранного просмотра изображения (фон — на GalleryFlow)
galleryFlow = galleryFlow.copy(
imageScreenBackgroundColor = R.color.black
)
// Кастомизация плейсхолдеров на ImageFlow (аватары/исходящее/входящее)
imageFlow = imageFlow.copy(
imagePlaceholderResId = R.drawable.placeholder_image
)
// Кастомизация списка файлов
filesFlow = filesFlow.copy(
backgroundColor = R.color.your_files_bg
)
// Кастомизация всплывающих окон (alert/popup)
popupsFlow = popupsFlow.copy(
backgroundColor = R.color.your_popup_bg
)
// Кастомизация меню вложений
// Примечание: BottomMenuChatFlow.backgroundColor имеет SDK-дефолт
// (R.color.ecc_input_background) — для согласованности с вашей темой
// задайте цвет явно.
bottomMenuChatFlow = bottomMenuChatFlow.copy(
backgroundColor = R.color.your_menu_bg
)
}
val theme = ChatTheme(flows)
chatCenterUI.theme = theme
Кастомизация основного экрана через chatFlow
chatFlow — это самый «толстый» поток с десятками полей. Используется для кастомизации тулбара, бабблов, поля ввода и т. п. на основном экране.
val flows = ChatFlows(components).apply {
chatFlow = chatFlow.copy(
// фон, разделители
backgroundColor = R.color.your_chat_bg,
separatorsColor = R.color.your_separator
)
// Точечная подмена объектов внутри InputViewStyle / WelcomeScreenStyle:
// получите текущий объект, скопируйте с нужными полями и присвойте обратно.
chatFlow.inputView = chatFlow.inputView.copy(
textInput = chatFlow.inputView.textInput?.copy(
placeholderTextResId = R.string.your_input_hint
)
)
chatFlow.welcomeScreenStyle = chatFlow.welcomeScreenStyle.copy(
backgroundColor = R.color.your_welcome_bg
)
}
Подробное описание ChatFlow и его 30+ полей (стили сообщений, тулбар, ввод, цитаты, опросы) — см. Компоненты и KDoc класса ChatFlow в исходниках SDK.
ChatFlow.fullScreenMode устарелПараметр fullScreenMode в ChatFlow помечен @Deprecated для targetSdk = 35. SDK всегда работает в edge-to-edge режиме. См. Известные ограничения.
Связанные разделы
- Дизайн-система: введение — обзор уровней кастомизации.
- Темы —
ChatComponents,ChatTheme, готовые примеры тем. - Компоненты — детальное описание ChatComponents (одного из источников flow-defaults).
- Цвета, Типографика, Изображения — токены, лежащие в основе flows.
- Известные ограничения — параметры с приоритетом серверной настройки и поведенческие особенности (включая
ChatFlow.fullScreenMode).