Jetpack Compose, как перекомпоновать при изменении внутреннего состоянияAndroid

Форум для тех, кто программирует под Android
Anonymous
Jetpack Compose, как перекомпоновать при изменении внутреннего состояния

Сообщение Anonymous »

Я новичок в Jetpack Compose, и я столкнулся с концептуальной проблемой, по которой я ищу ответ «Вот как вы обычно это делаете». Также может быть, что мой подход к проблеме не подходит для Compose.
У меня есть NotificationService в моем приложении (одиночка, в которую разные компоненты могут добавлять уведомления ), который имеет составную функцию для отображения текущих уведомлений в отдельных окнах.
Это упрощенная версия

Код: Выделить всё

object NotificationService {
private val notifications = mutableListOf()

@Composable
fun renderNotifications() {
// cleanup old notifications
notifications.removeAll { it.showUntil.isBefore(OffsetDateTime.now()) }

var index = 0
notifications.forEach {
Notification(it.message, index)
index++
}
}

fun notificationCount(): Int {
return notifications.size
}

fun addNotification(message: String) {
notifications.add(NotificationContainer(message, OffsetDateTime.now().plusSeconds(5)))
}
}

data class NotificationContainer(val message: String, val showUntil: OffsetDateTime)
Теперь я вызываю функцию рендеринга в основной части моего приложения следующим образом:

Код: Выделить всё

fun main() = application {
// dependencies
val notificationService = NotificationService

notificationService.renderNotifications()

OtherComposable() { ... }
}

Код: Выделить всё

OtherComposable
также содержит ссылку на NotificationService и добавляет уведомления о нажатиях кнопок в качестве теста. Функция рендеринга вначале вызывается только один раз. Я понимаю, почему это происходит: при рендеринге не изменяются входные данные и т. д. — У Compose нет причин перекомпоновать приложение здесь, поскольку изменилось только внутреннее состояние NotificationService. Как обрабатываются компоненты, которые только внутренне знают, когда их следует перекомпоновать? Я также попытался предоставить счетчик уведомлений, чтобы родитель мог знать, когда счетчик изменится, и затем перекомпоновать их, но я не знал, как мне нужно будет привязать/передать счетчик родителю. Как обычно обрабатывается подобный случай, когда вам нужно сказать родителям: «Пожалуйста, перерисуйте меня, мое состояние изменилось соответствующим образом»?
Поздравляем и спасибо!

Подробнее здесь: https://stackoverflow.com/questions/789 ... te-changes

Вернуться в «Android»