Navigation component + Dagger: не получается получить в SavedStateHandle аргумент, передаваемый в destination Action

Я использую Navigation Component, и при навигации передаю Int-значение, которое в вьюмодели destination-фрагмента вынимаю из savedStateHandle. Все работало ОК, пока проект я использовал Hilt для DI. Но в целях изучения обычного Dagger решил перевести проект на Dagger, и SavedStateHandle перестал работать должным образом (не могу получить из него направленный аргумент - в нем всегда дефолтное значение).

Попробовал из подсказок в интернете сработать с помощью ViewModelAssistedFactory с AbstractSavedStateViewModelFactory, но успехом попытка не увенчалась (тот же behavior).

Подскажите пожалуйста, где может быть проблема?

Вот так я перенаправляюсь в CharacterDetailFragment:

private fun onCharacterClick(character: Character) {
    val action = CharactersFragmentDirections.actionCharactersFragmentToCharacterDetailFragment(
        character.id
    )
    findNavController().navigate(action)
}

Это ток как я инициализирую вьюмодель в CharacterDetailFragment:

class CharacterDetailFragment : Fragment(R.layout.fragment_character_detail) {

    @Inject
    lateinit var assistedFactory: CharacterDetailViewModelAssistedFactory
    private val viewModel : CharacterDetailViewModel by viewModels { assistedFactory.create(this) }

    override fun onAttach(context: Context) {
        super.onAttach(context)
        (activity as MainActivity).appComponent.inject(this)
    }

Вьюмодель:

class CharacterDetailViewModelFactory @AssistedInject constructor(
    private val getCharacterUseCase: GetCharacterUseCase,
    @Assisted owner: SavedStateRegistryOwner
) : AbstractSavedStateViewModelFactory(owner, null) {
    override fun <T : ViewModel?> create(
        key: String,
        modelClass: Class<T>,
        handle: SavedStateHandle
    ): T = CharacterDetailViewModel(getCharacterUseCase, handle) as T
}

@AssistedFactory
interface CharacterDetailViewModelAssistedFactory {
    fun create(owner: SavedStateRegistryOwner) : CharacterDetailViewModelFactory
}

class CharacterDetailViewModel @Inject constructor(
    private val getCharacterUseCase: GetCharacterUseCase,
    private val handle: SavedStateHandle
) : ViewModel() {
    val charId = handle.get<Int>("charId") ?: 0

    private var _character: Character? = null
    val character = MutableLiveData<Character>()

    init {
        handle.get<Int>("charId")?.let {
            getCharacter(it)
        }
        Log.d(TAG, "char id: ${charId}")
    }
}

В NavGraph:

<fragment
    android:id="@+id/charactersFragment"
    android:name="space.rodionov.rickandmorty.presentation.character.characterlist.CharactersFragment"
    android:label="Characters"
    tools:layout="@layout/fragment_characters">
    <action
        android:id="@+id/action_charactersFragment_to_characterDetailFragment"
        app:destination="@id/characterDetailFragment" />
</fragment>
<fragment
    android:id="@+id/characterDetailFragment"
    android:name="space.rodionov.rickandmorty.presentation.character.characterdetail.CharacterDetailFragment"
    android:label="Character details"
    tools:layout="@layout/fragment_character_detail">
    <argument
        android:name="charId"
        app:argType="integer" />
</fragment>

Ответы (1 шт):

Автор решения: IR42

Не получаете, потому что не передаёте:

) : AbstractSavedStateViewModelFactory(owner, null) {

вместо null тут должны быть те самые аргументы из фрагмента

→ Ссылка