Код: Выделить всё
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
)
}
}
С помощью новой типобезопасной навигации я попробовал следующее:
С помощью новой типобезопасной навигации я попробовал следующее:
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