Как установить значения по умолчанию для аргументов навигации в типобезопасной навигации 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

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