Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] E se o eu quisesse passar argumentos de fora durante a criação do viewModel?

A dúvida é basicamente essa da pergunta.

Usando o ChatGPT consegui realizar o processo por meio da criação de uma classe apartada de Factory dentro do meu arquivo de viewmodel desse jeito e cheguei a fazer algo parecido também em um projeto antigo que estava convertendo do sistema de views para compose para poder passar meu repository para o viewmodel pois precisava do Context pra iniciar o repository:

class ProductDetailsViewModelFactory(val dao:ProductDao, val savedStateHandle: SavedStateHandle):ViewModelProvider.Factory{
    override fun <T : ViewModel> create(modelClass: Class<T>): T {
        if (modelClass.isAssignableFrom(ProductDetailsViewModel::class.java)) {
            return ProductDetailsViewModel(dao = dao, savedStateHandle = savedStateHandle ) as T
        }
        throw IllegalArgumentException("UnknowViewModel")
    }
}

Porém gostaria de confirmar se isso é algo não recomendado. E nesse caso, o porquê.

1 resposta
solução!

Olá Rafael!

Pelo que entendi da sua pergunta, você está se perguntando se a criação de uma classe separada de Factory para passar argumentos externos durante a criação do ViewModel é algo recomendado ou não.

Na verdade, o uso de uma classe Factory para criar ViewModels com argumentos externos é uma prática comum e recomendada. Ela permite que você forneça os parâmetros necessários para a criação do ViewModel de forma flexível e controlada.

No seu exemplo, você criou a classe ProductDetailsViewModelFactory, que recebe um ProductDao e um SavedStateHandle como parâmetros. Esses parâmetros são então utilizados para criar uma instância do ProductDetailsViewModel. Essa abordagem é válida e pode ser utilizada sem problemas.

A principal vantagem de utilizar uma classe Factory é que ela permite a injeção de dependências no ViewModel, tornando-o mais testável e desacoplado. Além disso, ela facilita a reutilização do ViewModel em diferentes partes do código, pois você pode fornecer diferentes parâmetros durante a criação.

Portanto, não se preocupe, a abordagem que você utilizou é válida e recomendada. Continue utilizando-a se ela atende às suas necessidades.

Espero ter ajudado e bons estudos!