Я прохожу курс Android-разработки, на курсе мне поручили написать следующее:
class ItemDetailsViewModel(
savedStateHandle: SavedStateHandle,
private val itemsRepository: ItemsRepository
) : ViewModel() {
private val itemId: Int = checkNotNull(savedStateHandle[ItemDetailsDestination.itemIdArg])
//...
}
Я не могу понять, как получается itemId, и хочу знать, есть ли у кого-нибудь указатели.
Место назначения сведений об элементе:
object ItemDetailsDestination : NavigationDestination {
override val route = "item_details"
override val titleRes = R.string.item_detail_title
const val itemIdArg = "itemId"
val routeWithArgs = "$route/{$itemIdArg}"
}
Инициализатор:
object AppViewModelProvider {
val Factory = viewModelFactory {
//...
// Initializer for ItemDetailsViewModel
initializer {
ItemDetailsViewModel(
this.createSavedStateHandle(),
inventoryApplication().container.itemsRepository
)
}
//...
}
}
Я пробовал использовать отладчик, но он мне не очень помог, он просто показывает, что есть вызов:
class SavedStateHandle {
//...
@MainThread
operator fun get(key: String): T? {
return try {
@Suppress("UNCHECKED_CAST")
regular[key] as T?
} catch (e: ClassCastException) {
// Instead of failing on ClassCastException, we remove the value from the
// SavedStateHandle and return null.
remove(key)
null
}
}
//...
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... tatehandle