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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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