ViewModel é uma das melhores coisas no Android Jetpack para permitir que a lógica se afaste de Activity .
No entanto, um grande retrocesso do ViewModel tem, não há como injetar dependências facilmente nele enquanto ele é injetado na Activity. Eu exploro muitas maneiras de acordo com este artigo , e nenhuma delas é ideal.
Felizmente agora com o Punho de Adaga , isso se tornou muito mais possível.
Supondo que eu tenha uma Activity com seu ViewModel. Existem três coisas que a Activity precisa passar para o View Model
private val viewModel: MyViewModel by viewModels{
MyViewModelFactory(this, Repository(),
intent.extras)
}
class MyViewModelFactory(
owner: SavedStateRegistryOwner,
private val repository: Repository,
defaultArgs: Bundle? = null
) : AbstractSavedStateViewModelFactory(owner, defaultArgs) {
override fun <T : ViewModel> create(
key: String, modelClass: Class<T>, handle: SavedStateHandle
): T {
return MyViewModel(
repository, handle
) as T
}
}
Dagger Hilt é um Dagger simplificado especialmente para Android. A configuração é relativamente simples. Confira abaixo a configuração inicial.
Punho da adaga: ainda mais curto e fácil!Depois de configurar o Dagger Hilt para seu projeto, agora podemos trabalhar na injeção de ViewModel.
Para usar @HiltViewModel, você precisará adicionar essas 2 bibliotecas em cima das Bibliotecas Dagger Hilt adicionadas conforme compartilhado no artigo acima.
implementation "androidx.hilt:hilt-lifecycle-viewmodel
:1.0.0-alpha03"
kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha03'
@HiltViewModel
class MyViewModel @Inject constructor(
private val repository: Repository,
private val savedStateHandle: SavedStateHandle
) : ViewModel(), LifecycleObserver {
class MyViewModel @ViewModelInject constructor(
private val repository: Repository,
@Assisted private val savedStateHandle: SavedStateHandle
) : ViewModel(), LifecycleObserver {
Com isso instalado, você não precisa mais de nenhuma ViewModelFactory! Tudo é feito para você! Em sua atividade, agora você pode apenas usar o KTX viewModels()diretamente.
private val viewModel: MyViewModel by viewModels()
Eu criei um exemplo de design de trabalho aqui . Fornecido abaixo para uma comparação simples e rápida de
@ViewModelInjecte punho de adaga.
Se você achar isso útil, o artigo abaixo também pode ser útil.
Passando dados de intenção de atividade para ViewModel por meio de injeçãoUm guia passo a passo para migrar do Dagger para o Hilt em um projeto de vários módulos. Estrutura do Projeto Para visualizar o projeto, ele contém vários módulos NetworkModule, StorageModule, CommonModule, FeatureModule etc.
Neste guia abrangente, exploraremos as habilidades essenciais exigidas para desenvolvedores iOS juniores. De linguagens de programação como Swift e Objective-C a colaboração e comunicação, abordaremos tudo o que um desenvolvedor iOS júnior precisa saber para ter sucesso no mercado competitivo atual.
Em 2022, com o lançamento do GPT-3, a habilidade de escrita parece se tornar menos importante. Com a IA, pessoas com redação ruim também podem gerar funcionários de qualidade.
[Alerta de gatilho: este ensaio inclui capturas de tela de pessoas elogiando o assassino de Jordan Neely.] Os policiais finalmente - e talvez com relutância - acusaram Daniel Penny, o homem que sufocou Jordan Neely até a morte, por aquele homicídio.
“Ei, Siri, toque Me Dive, de Olivia Dean.” Era maio de 2021 quando comecei meu estágio na Future Academy Africa em Akure, Nigéria.
Você pode ser um investigador OSINT, jogador CTF ou simplesmente alguém que está recebendo chamadas de spam. Alguém que está tentando verificar o número que você viu em um anúncio.