0Pricing
Android Academy · Aula

Injetando em ViewModels

Use @HiltViewModel para uma injeção organizada.

Injetando em ViewModels é uma aula grátis de Android Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Android Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Android Academy inclui 4 aulas no total.

Injetando ViewModels com Hilt

ViewModels são especiais: o framework os instancia por meio de uma fábrica. Hilt se integra a esse processo por meio da anotação @HiltViewModel.

Anotando o ViewModel

Marque o ViewModel com @HiltViewModel e anote o construtor dele com @Inject.

import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject

@HiltViewModel
class UserViewModel @Inject constructor(
    private val repo: UserRepository
) : ViewModel()

O que Hilt fornece

Hilt procura cada parâmetro do construtor no grafo de dependências. Desde que UserRepository esteja associado (por um módulo ou por injeção pelo construtor), Hilt o fornecerá automaticamente.

Obtendo-o no Compose

Use hiltViewModel() dentro de um Composable para obter um ViewModel fornecido pelo Hilt.

import androidx.hilt.navigation.compose.hiltViewModel

@Composable
fun UserScreen(
    vm: UserViewModel = hiltViewModel()
) {
    val state by vm.uiState
        .collectAsStateWithLifecycle()
}

O host deve ser um ponto de entrada

Para que hiltViewModel() funcione, a Activity que hospeda o conteúdo deve estar anotada com @AndroidEntryPoint. Isso conecta o Compose ao grafo do Hilt.

@AndroidEntryPoint
class MainActivity : ComponentActivity()

Injetando outras dependências

Você pode injetar qualquer elemento do grafo: repositórios, casos de uso e até o banco de dados Room fornecido por um módulo.

@HiltViewModel
class HomeViewModel @Inject constructor(
    private val getUsers: GetUsersUseCase,
    private val analytics: Analytics
) : ViewModel()

Injetando o contexto do aplicativo

Precisa de um contexto? Injete o contexto qualificado do aplicativo com @ApplicationContext.

@HiltViewModel
class PrefsViewModel @Inject constructor(
    @ApplicationContext private val context: Context
) : ViewModel()

SavedStateHandle

Hilt fornece automaticamente SavedStateHandle, que transporta argumentos de navegação e sobrevive à morte do processo.

@HiltViewModel
class DetailViewModel @Inject constructor(
    handle: SavedStateHandle
) : ViewModel() {
    val id: Int = handle.get<Int>("id") ?: 0
}

A conexão completa

De ponta a ponta: o módulo fornece o repositório → Hilt o injeta no ViewModel → o Compose obtém o ViewModel por meio de hiltViewModel(). Não há fábricas manuais.

Sem código manual de fábrica

Sem Hilt, você teria de escrever uma ViewModelProvider.Factory personalizada para cada ViewModel que precisasse de argumentos no construtor. @HiltViewModel elimina tudo isso.

Completando o conjunto

Agora você tem a pilha moderna completa: ViewModel + estado ciente do ciclo de vida, persistência com Room, corrotinas e Flow, tudo conectado com Hilt DI.

Verificação rápida

Teste sua compreensão da injeção de ViewModels.

Recapitulação

Você aprendeu:

  • O construtor com @HiltViewModel + @Inject permite que Hilt crie ViewModels.
  • Obtenha-os no Compose com hiltViewModel() dentro de um host @AndroidEntryPoint.
  • Injete repositórios, @ApplicationContext e SavedStateHandle.
  • Não são necessárias fábricas manuais.

Perguntas Frequentes

A aula “Injetando em ViewModels” é grátis?

Sim — o texto completo de “Injetando em ViewModels” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Android Academy, atualize para CoddyKit PRO. O curso de Android Academy inclui 4 aulas no total.

O que vou aprender em “Injetando em ViewModels”?

Use @HiltViewModel para uma injeção organizada. Você pratica Android Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Android Academy?

Nenhuma experiência prévia é necessária. Android Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Injetando em ViewModels”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Android Academy?

Sim. Cada aula de Android Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Por que usar injeção de dependências?
  2. Configurando o Hilt
  3. Módulos e provedores
  4. Injetando em ViewModels
← Voltar para Android Academy