Рекомпозиция не вызывается при изменении класса State Holder.Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Рекомпозиция не вызывается при изменении класса State Holder.

Сообщение Anonymous »

Я хочу использовать класс держателя состояния, чтобы сохранять некоторые параметры состояния на уровне приложения, например, если необходимо отобразить диалоговое окно. Для этого я добавил переменные заголовка и сообщения в класс держателя состояния приложения. Когда я устанавливаю для них значение, отличное от нуля, в моем приложении должно отображаться диалоговое окно, потому что я проверяю, отличаются ли эти переменные от нуля, чтобы отобразить их на моем компонуемом экране. Что-то не работает, потому что, когда я устанавливаю для этих переменных значение, отличное от нуля, ничего не происходит. Кажется, рекомпозиция не запускается.
Это компонуемое состояние приложения и функция запоминания, которую я использую для его запоминания:
val appStateHolder = rememberAppStateHolder()

@Composable
fun rememberAppStateHolder(
navController: NavHostController = rememberNavController(),
dialogTitle: StringResource? = null,
dialogMessage: StringResource? = null,
): AppStateHolder {
return remember(
navController,
dialogTitle,
dialogMessage
) {
AppStateHolder(
navController = navController,
dialogTitle = dialogTitle,
dialogMessage = dialogMessage
)
}
}

Подробнее:
@Stable
class AppStateHolder(
val navController: NavHostController = NavHostController(),
var dialogTitle: StringResource? = null,
var dialogMessage: StringResource? = null
) {
// UI State
val currentDestination: NavDestination?
@Composable get() = navController
.currentBackStackEntryAsState().value?.destination

fun isDialogEnabled(): Boolean {
return (dialogTitle != null || dialogMessage != null)
}

// UI logic
fun navigate(route: String) {
navController.navigate(route)
}

fun showDialog(dialogTitle: StringResource, dialogMessage: StringResource) {
this.dialogTitle = dialogTitle
this.dialogMessage = dialogMessage
}

fun hideDialog() {
this.dialogTitle = null
this.dialogMessage = null
}
}

Вот как я проверяю, должно ли отображаться диалоговое окно:
if (appStateHolder.isDialogEnabled()) {
MessageDialog(
title = stringResource(Res.string.about),
message = stringResource(Res.string.about_message),
onCloseRequest = { appStateHolder.hideDialog() }
)
}

Вот как я устанавливаю значения диалога, отличные от нуля:
appStateHolder.showDialog(title, message)


Подробнее здесь: https://stackoverflow.com/questions/793 ... s-modified
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Рекомпозиция не вызывается при изменении класса State Holder.
    Anonymous » » в форуме Android
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Рекомпозиция при несвязанных изменениях состояния
    Anonymous » » в форуме Android
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Рекомпозиция при использовании архитектуры MVI
    Anonymous » » в форуме Android
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Рекомпозиция при использовании архитектуры MVI
    Anonymous » » в форуме Android
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Тупая рекомпозиция в Android Compose
    Anonymous » » в форуме Android
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous

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