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

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

Сообщение Anonymous »

Недавно я начал использовать новую навигационную функцию навигации в Jetpack Compose. Ранее я мог передать значения по умолчанию для навигационных аргументов, таких как это: < /p>

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

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 я мог бы безопасно получить значения из SaveStateHandle. 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
)
}
}

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

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

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

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

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

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

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

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