Flutter Client / Presentation

Экраны приложения

Каталог UI экранов клиента Chepuhagram. Папка: lib/presentation/screens/

Иерархия экранов и зависимостей

Каждый экран разработан как StatefulWidget или StatelessWidget, потребляющий состояние провайдеров через метод context.watch<Provider>() или context.read<Provider>().

Экран (Файл)КлассЗависимости от ProviderНазначение
splash_screen.dartSplashScreenAuthProviderНачальная инициализация, проверка JWT, проверка FaceID, перенаправление.
login_screen.dartLoginScreenAuthProviderФорма входа по логину/паролю и ввода 2FA TOTP токена.
account_setup_screen.dartAccountSetupScreenAuthProvider, CryptoServiceГенерация ключей X25519, установка имени и мастер-пароля.
key_recovery_screen.dartKeyRecoveryScreenAuthProvider, CryptoServiceИмпорт приватного E2EE ключа из облака с вводом мастер-пароля.
chats_screen.dartChatsScreenContactProvider, AuthProviderГлавное меню. Список активных переписок с аватарами, непрочитанными пушами и поиском.
chat_screen.dartChatScreenContactProvider, AuthProviderИнтерфейс чата с собеседником. Отрендерен через CustomScrollView.
call_screen.dartCallScreenWebRTCService, ContactProviderЭкран активного вызова. Интегрирован с WebRTC видео рендерерами.
camera_screen.dartCameraScreen—Съемка медиафайлов через плагин camera с нативным сжатием.
settings_screen.dartSettingsScreenAuthProviderПанель изменения профиля пользователя (имя, о себе, телефон, почта, аватар).
security_settings_screen.dartSecuritySettingsScreenAuthProviderНастройка смены паролей, включения/выключения TOTP 2FA и биометрии.
sessions_screen.dartSessionsScreenAuthProviderСписок сессий устройств с IP адресами и кнопками аннулирования.
admin_panel_screen.dartAdminPanelScreenAuthProvider, APIServiceАдминистративный интерфейс управления пользователями и рассылками.
qr_login_screen.dartQRLoginScreenAuthProvider, APIServiceСканирование QR кода на ПК для быстрой авторизации.
privacy_settings_screen.dartPrivacySettingsScreenAuthProviderПереключатели видимости личных данных (телефон, email и т.д.).

Детальное описание ключевых UI-компонентов

1. Окно чата (ChatScreen)

Состоит из следующих частей:

  • ListView.builder с обратным порядком элементов (reverse: true) для оптимального скроллинга сообщений снизу вверх.
  • MessageBubble — кастомный виджет пузыря сообщения. Определяет отправителя (выравнивание вправо — синий/фиолетовый, влево — темный) и отображает E2EE медиафайлы с индикацией скачивания.
  • ChatInputArea — текстовое поле ввода с кнопками прикрепления файлов, записи голосовых сообщений (управление через flutter_sound) и отправки кружочков. Отслеживает фокус клавиатуры и отсылает WebSocket события typing / stop_typing.

2. Окно звонка (CallScreen)

Экран разворачивается на весь экран и использует слой Stack для наложения локального превью камеры (маленькое окно, перетаскиваемое пальцем) поверх полноэкранного превью удаленной камеры собеседника. Отображает статус вызова («Инициализация», «Дозвон», «Подключение», «Соединение установлено») и длительность разговора.