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

Как правило, логикой обновления карточек занимается 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/108
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/108

View MORE
Open in Telegram


Telegram News

Date: |

With the “Bear Market Screaming Therapy Group,” we’ve now transcended language. While the character limit is 255, try to fit into 200 characters. This way, users will be able to take in your text fast and efficiently. Reveal the essence of your channel and provide contact information. For example, you can add a bot name, link to your pricing plans, etc. ‘Ban’ on Telegram You can invite up to 200 people from your contacts to join your channel as the next step. Select the users you want to add and click “Invite.” You can skip this step altogether. How to Create a Private or Public Channel on Telegram?
from us


Telegram Kotlin Adept Notes
FROM American