Реалізація екрану ChatsScreen для відображення списку чатів. Використання LazyColumn. Динамічний розмір тексту. Компоненти Pull To Refresh та Dropdown Menu.
Тайм-коди:
- 00:00 – Вступ
- 01:23 – State для екрану та ViewModel
- 03:20 – Обробка пустих списків
- 04:58 – Інтерфейс екрану для пустого списку
- 10:59 – LazyColumn для непустого списку
- 25:27 – Умовний модифікатор
- 29:46 – Лічильник непрочитаних повідомлень
- 35:18 – Іконка для додаткових дій
- 36:45 – AvatarImageView: перша буква назви чату
- 45:50 – Випадковий колір для кожного чату: hashCode + Random
- 51:18 – Динамічний розмір шрифту: Canvas, drawText, scale, TextMeasurer
- 01:01:13 – Перезавантаження даних: PullToRefreshBox
- 01:06:47 – Реалізація DropdownMenu для елементу списку
- 01:10:08 – Асинхронне видалення чату: ChatsAction & ViewModel
- 01:14:16 – Оновлений State, індикація видалення чату, UiChat
- 01:22:14 – Фікс відсутнього байдингу в Hilt
- 01:23:33 – Фінальні фікси
- 01:26:18 – Запуск проекту
Код проекту тут (silver) і тут (gold).
Після запису відео трошки змінив код:
- додав юніт-тести та скріншот тести
- трохи змінив кольори, відступи, текстові стилі
- для Avatar Image додав модифікатор clip(CircleShape)
- виніс логіку для маштабування тексту – в окремий компонент AutoScaledText
- виніс лічильник непрочитаних повідомлень в компонент CounterBadge + переробив його на AutoScaledText
- створив окремий модифікатор enabledAlpha