KOTLIN_ADEPT Telegram 107
Представьте, что у вас есть список карточек, и на каждой из них отображается информация, которая обновляется в реальном времени.

Как правило, логикой обновления карточек занимается ViewModel экрана, однако это не всегда удобно. Что, если у каждой карточки будет собственный компонент логики, который будет подписываться на данные и самостоятельно изменять своё состояние?

Проблема здесь в том, что необходимо отменять подписку и освобождать ресурсы, если карточка больше не видна на экране.

🌳 Решить эту задачу можно с помощью библиотеки Decompose. Однако стандартные методы навигации из коробки не подходят. Наиболее близкий по смыслу — это ChildPages, который преимущественно используется в связке с ViewPager. Тем не менее, он отличается от ленивого списка.

Поэтому можно создать собственный тип навигации для использования с LazyList, который корректно управляет жизненным циклом компонентов:
🔵Видимые компоненты будут находиться в состоянии Resumed.
🔸Компоненты, ближайшие к видимым, — в состоянии Started.
🔸Остальные — в состоянии Created или Destroyed.

Таким образом, получилось декомпозировать логику и избавиться от бойлерплейта, связанного с отменой подписок.

Пример и реализацию кастомного механизма навигации можно посмотреть здесь 🐱
За решение спасибо моему коллеге Евгению Мельцайкину 👏
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥36👍6



tgoop.com/kotlin_adept/107
Create:
Last Update:

Представьте, что у вас есть список карточек, и на каждой из них отображается информация, которая обновляется в реальном времени.

Как правило, логикой обновления карточек занимается ViewModel экрана, однако это не всегда удобно. Что, если у каждой карточки будет собственный компонент логики, который будет подписываться на данные и самостоятельно изменять своё состояние?

Проблема здесь в том, что необходимо отменять подписку и освобождать ресурсы, если карточка больше не видна на экране.

🌳 Решить эту задачу можно с помощью библиотеки Decompose. Однако стандартные методы навигации из коробки не подходят. Наиболее близкий по смыслу — это ChildPages, который преимущественно используется в связке с ViewPager. Тем не менее, он отличается от ленивого списка.

Поэтому можно создать собственный тип навигации для использования с LazyList, который корректно управляет жизненным циклом компонентов:
🔵Видимые компоненты будут находиться в состоянии Resumed.
🔸Компоненты, ближайшие к видимым, — в состоянии Started.
🔸Остальные — в состоянии Created или Destroyed.

Таким образом, получилось декомпозировать логику и избавиться от бойлерплейта, связанного с отменой подписок.

Пример и реализацию кастомного механизма навигации можно посмотреть здесь 🐱
За решение спасибо моему коллеге Евгению Мельцайкину 👏

BY Kotlin Adept Notes




Share with your friend now:
tgoop.com/kotlin_adept/107

View MORE
Open in Telegram


Telegram News

Date: |

Although some crypto traders have moved toward screaming as a coping mechanism, several mental health experts call this therapy a pseudoscience. The crypto community finds its way to engage in one or the other way and share its feelings with other fellow members. How to Create a Private or Public Channel on Telegram? Each account can create up to 10 public channels Don’t publish new content at nighttime. Since not all users disable notifications for the night, you risk inadvertently disturbing them. Telegram iOS app: In the “Chats” tab, click the new message icon in the right upper corner. Select “New Channel.”
from us


Telegram Kotlin Adept Notes
FROM American