Как установить значения по умолчанию для аргументов навигации в типобезопасной навигации Jetpack Compose?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как установить значения по умолчанию для аргументов навигации в типобезопасной навигации Jetpack Compose?

Сообщение Anonymous »

Недавно я начал использовать новую функцию типобезопасной навигации в Jetpack Compose. Раньше я мог передавать значения по умолчанию для аргументов навигации следующим образом:

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

class WalletGiftDetailLandingArgs(
private val savedStateHandle: SavedStateHandle,
) {
val giftRefId: String
get() = savedStateHandle[KEY_GIFT_REF_ID] ?: ""

val isFromRedemptionReminderNotification: Boolean
get() = savedStateHandle[KEY_IS_FROM_REDEMPTION_REMINDER_NOTIFICATION] ?: false
}

object WalletGiftDetailDestination : NavigableDestination(
route = "$ROUTE/{$KEY_GIFT_TYPE}/{$KEY_GIFT_REF_ID}/{$KEY_IS_FROM_REDEMPTION_REMINDER_NOTIFICATION}",
)

fun NavGraphBuilder.walletGiftDetailScreen(
giftRefId: String = "",
isFromRedemptionReminderNotification: Boolean,
onClickBack: () -> Unit,
onRemoveFromWalletSuccess: () -> Unit,
onRedirectToReceivedGiftsScreen: () -> Unit,
) {
composable(
route = WalletGiftDetailDestination.route,
arguments = listOf(
navArgument(KEY_GIFT_REF_ID) {
type = NavType.StringType
defaultValue = giftRefId
},
navArgument(KEY_IS_FROM_REDEMPTION_REMINDER_NOTIFICATION) {
type = NavType.BoolType
defaultValue = isFromRedemptionReminderNotification
}
)
) {
WalletGiftDetailScreenRoute(
onClickBack = onClickBack,
onRemoveFromWalletSuccess = onRemoveFromWalletSuccess,
onRedirectToReceivedGiftsScreen = onRedirectToReceivedGiftsScreen
)
}
}
В ViewModel я мог безопасно получить значения из SavedStateHandle.
С помощью новой типобезопасной навигации я попробовал следующее:
С помощью новой типобезопасной навигации я попробовал следующее:
p>

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

@Serializable
class WalletGiftDetailLandingArgs(
val giftRefId: String,
val isFromRedemptionReminderNotification: Boolean,
)

fun NavGraphBuilder.walletGiftDetailScreen(
giftRefId: String = "",
isFromRedemptionReminderNotification: Boolean,
onClickBack: () -> Unit,
onRemoveFromWalletSuccess: () -> Unit,
onRedirectToReceivedGiftsScreen: () -> Unit,
) {
composable {
WalletGiftDetailScreenRoute(
onClickBack = onClickBack,
onRemoveFromWalletSuccess = onRemoveFromWalletSuccess,
onRedirectToReceivedGiftsScreen = onRedirectToReceivedGiftsScreen
)
}
}

Однако я не могу понять, как передать значение по умолчанию для аргументов в новой настройке типобезопасной навигации.
Дополнительная сложность:
Если я попытаюсь обработать значения по умолчанию вручную, передав их непосредственно в составной элемент, я столкнусь с другой проблемой: перекомпоновкой экрана. Каждая рекомпозиция снова вызывает функцию, что может привести к тому, что ViewModel повторно запустит логику (например, получение или обработку переданных ей значений). Это неэффективно и может привести к непредвиденным побочным эффектам.
Существует ли правильный способ определить аргументы по умолчанию в типобезопасной навигационной системе, чтобы избежать этих проблем, или существует ли рекомендуемый обходной путь?
Будем признательны за любые рекомендации!
Будем признательны за любые рекомендации!

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

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

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

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

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

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

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