Viewmodel dependency injection with Koin
āļāļąāļ
- āđāļāļĒāđāļāļĢāđāđāļĄāļ·āđāļ 11 āļ.āļ. 2024
- ðIn this Kotlin Pill we learn how to use functionalities from the Koin library to solve dependency injection in Android using Kotlin.
The ViewModel is one of the most important components of MVVM architecture and the Android Jetpack. By default a ViewModel cannot receive dependencies via constructor. In a previous video we saw how to inject dependencies into a ViewModel by means of a custom Factory class.
In this tutorial we'll learn how to use de Koin Library to simplify this process, with no need of a Factory class.
The app used in the example is the Lib_Ghi prototype, a client for the Studio Ghibli API. The source code is available in myt github repository.
ðŽChapter list
00:00 Intro
01:28 Adding dependencies
01:58 Koin setup and initialiazation
05:53 Instantiate the ViewModel in the Activity
07:00 Viewmodel dependency injection using Koin
10:31 Testing the app
ðŧ Github repo:
github.com/chicorasia/bootcam...
Use the commit `b9aa2cf` from branch `koin`.
ð§
Track: Split - KV [Audio Library Release]
Music provided by Audio Library Plus
Watch: âĒ Split - KV | Free Back...
Free Download / Stream: alplus.io/split
#Kotlinââââââ #Androidââââââ #Devââââââ #Tutorialââââââ #MVVM #ViewModel #DependencyInjectionââââ #Koin
Excelente! Muuuito Obrigado!
ParabÃĐns Chico!!
Excelente conteÚdo e didÃĄtica incrÃvel..
Muito bom, parabÃĐns pelo vÃdeo. HÃĄ pouco material em portuguÊs sobre Kotlin Android e MVVM, e com o Koin entÃĢo, fica mais difÃcil ainda encontrar. No seu vÃdeo a explicaçÃĢo foi muito clara, seu modo de explicar ÃĐ muito fÃĄcil de entender. Aprendi tudo que sei sobre Android na internet, e vou começar amanhÃĢ em uma empresa como Desenvolvedor Android JÚnior, e soube que no projeto ÃĐ usado Koin, jÃĄ me ajudou a ter uma boa noçÃĢo bÃĄsica de como funciona, embora tenham me dito que essa parte sÃĢo os seniores que implementam.
Esse canal ÃĐ muito bom.
Estudando e pesquisando informaçÃĩes... Obrigado por me ajudar e contribuir para o meu entendimento!
Show de bola
Gosto muito da forma que vc ensina...bem explicado. Gostaria de saber qual trilha aqui no youtube vc recomendaria para estudar kotlin/android para iniciantes?
Muito bom, parabÃĐns pelo trabalho vem ajudando bastante gente. Saberia como injetar uma interface de repository ao inves de uma classe(Repository) comum? Estou procurando alguns conteudos sobre isso mas nÃĢo achei nada muito entedivel ainda kk.
OlÃĄ Hianuy, tudo bem? Obrigado pelo apoio, saber que o trabalho estÃĄ tendo impacto ÃĐ o maior incentivo para eu continuar produzindo. NÃĢo sei se entendi muito bem sua pergunta, mas nesse trecho do vÃdeo eu faço a injeçÃĢo de uma classe abstrata Database usando o Koin: th-cam.com/video/BVKYlepD0r0/w-d-xo.html Abs e bons estudos!
quais as vantagens de usar o koin ao invÃĐs do hilt alÃĐm do tamanho da aplicaçÃĢo?
Boa noite chico
No minuto 6:20 quando vocÊ implementa a linha:
private val mViewMode: FilmListViewModel by viewModel()
vocÊ pede pra escolher o terceiro import, o que tem clazz com 2 z.
no meu projeto nÃĢo esta aparecendo essa opçÃĢo na hora dos imports, fui olhar o que tem no seu git e no repositÃģrio referente ( branch koin) A classe MainActivity jÃĄ estÃĄ bem diferente, provavelmente o que tem lÃĄ jÃĄ ÃĐ a versÃĢo final.
VocÊ teria como informa qual exatamente ÃĐ o import que ÃĐ chamado para classe MainActivity quando se escolhe a terceira opçÃĢo ? a classe com 2 z ?
Desde jÃĄ agradeço.
OlÃĄ Chico, eu resolvi, aparentemente o meu problema foi causado por importe errado no meu TreinoViewModel (OBS: o meu projeto nÃĢo ÃĐ o seu, ele lista uma serie de treinos), eu nÃĢo estava usando o import androidx.lifecycle.ViewModel e isso causou o problema mais na frente quando eu fui delegar a dependÊncia do TreinoViewModel para o Koin:
private val mViewMode: TreinoViewModel by viewModel()
Por outro lado, apesar de minha implementaçÃĢo ter funcionado perfeitamente, eu precisei implementar uma funçÃĢo sugerida pelo prÃģprio android estÚdio, dentro do meu fragmento:
private operator fun Any.setValue(treinoFragment: TreinoFragment, property: KProperty, treinoViewModel: TreinoViewModel) {
}
NÃĢo sei se isso existe em seu projeto ou se foi necessÃĄrio por conta do fragmento, em todo o caso estou deixando comentado para o caso de alguÃĐm enfrentar a mesma dificuldade que eu.