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: |

A vandalised bank during the 2019 protest. File photo: May James/HKFP. With Bitcoin down 30% in the past week, some crypto traders have taken to Telegram to “voice” their feelings. Channel login must contain 5-32 characters Developing social channels based on exchanging a single message isn’t exactly new, of course. Back in 2014, the “Yo” app was launched with the sole purpose of enabling users to send each other the greeting “Yo.” Each account can create up to 10 public channels
from us


Telegram Kotlin Adept Notes
FROM American