Android

Hilt ile ViewModel’inize Güvenli Arglar Geçirme | tarafından Matt Robertson

ViewModel’lerin enjekte edilmesini destekleyen Hilt 2.31 için GÜNCELLENDİ.

Kabza Android Jetpack kitaplıklarına harika bir ekleme oldu ve Android için Dagger olan canavarı büyük ölçüde basitleştirdi. Aktiviteleri ve Fragmanları enjekte etmek ile kolaydır @AndroidEntryPoint.

@AndroidEntryPoint
class UserFragment: Fragment()

Hilt 2.31’den itibaren ViewModel’leri enjekte etmek de bir o kadar kolay.

class UserViewModel @Inject constructor (
private val repo: UserRepo
) : ViewModel() {
...
}

Kotlin delegelerinin büyüsünü ekleyin ve tüm bağımlılıklarıyla birlikte bir ViewModel elde etmek için inanılmaz derecede basit bir yolumuz var (bir kez Hilt bağlamalarınızı ayarlayın).

val viewModel: UserViewModel by viewModels()

Ama ya geçmemiz gerekirse Güvenli Arglar gibi argüman userId ViewModel’imize? Olmadan bağımlılık enjeksiyonu, bizim kullanarak bir ViewModelFactory başlatırdık userId ve bu ViewModelFactory’yi temsilcimize sağlayın.

val args: UserFragmentArgs by navArgs()val viewModelFactory: UserViewModelFactory by lazy {
UserViewModelFactory(args.userId)
}
val viewModel: UserViewModel by viewModels { viewModelFactory }

Ancak Hilt’i kullanarak, bağımlılık yönetiminin sorumluluğunu bilerek değiştirdik. uzakta bizim Fragmanımız. ViewModelFactory örnekleme mantığını şimdi buraya dahil etmek ters etki yapacaktır. Peki, Hilt aracılığıyla elde edilen bir ViewModel örneğine Güvenli Args argümanını nasıl iletebiliriz?

cevap şurada bulunur SavedStateHandle. SavedStateHandle “kaydedilmiş duruma nesneler yazmanıza ve bu durumdan nesneler almanıza izin veren bir anahtar-değer haritasıdır. Bu değerler, süreç sistem tarafından öldürüldükten sonra da devam eder ve aynı nesne aracılığıyla erişilebilir kalır.” Süreç ölümünün ötesinde kalıcı durum, kendi başına yeterince yararlı bir özelliktir, ancak Hilt-SafeArgs-ViewModel kurulumumuzda bu kitaplık daha da güçlü hale gelir. SavedStateHandle’ı kullanmak için onu ViewModel kurucumuza dahil ediyoruz.

class UserViewModel @Inject constructor (
private val repo: UserRepo,
private val state: SavedStateHandle
) : ViewModel() {
...
}

Artık tüm parçalar yerinde olduğuna göre, Güvenli Args argümanımızı ViewModel’imize geçirmek için ne yapmamız gerekiyor? Cevap sizi şaşırtabilir: hiçbir şey. Bizim userId Safe Arg, ViewModel’imiz için SavedStateHandle aracılığıyla herhangi bir ek çalışma olmadan zaten mevcuttur.

class UserViewModel @Inject constructor (
private val repo: UserRepo,
private val state: SavedStateHandle
) : ViewModel() {
val user = repo.getUser(
state.get<String>("userId")
)
}

SavedStateHandle ile Safe Arg’larınızdan kullanacağınız aynı anahtar adını kullandığınızdan emin olun. Örneğin, Fragment’imizde Güvenli Args argümanımızı kullanmak için onu şu şekilde alırız:

val args: UserFragmentArgs by navArgs()
...
args.userId

Güvenli Args bağımsız değişken adının args.userId ViewModel’imizde SavedStateHandle anahtarı olarak kullandığımız addır (“userId”). Safe Args kitaplığı, içeriğini Hilt’in size sağladığı SavedStateHandle’dan otomatik olarak erişilebilir olacak şekilde iletir.

Bu kadar! Biraz sihir gibi geliyor ve bu kütüphaneler üzerinde çalışan Jetpack ekipleri tarafından harika bir eklenti.

Kotlin ve Android geliştirmedeki en iyi uygulamalar hakkında daha fazla bilgi için takip edin.

İlgili Makaleler

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.

Başa dön tuşu