hilt
安装
build.gradle
中配置
buildscript {
ext {
// ...
hiltVersion = "2.38.1"
hiltCompilerVersion = "1.0.0"
hiltComposeVersion = "1.0.0-alpha03"
}
dependencies {
classpath "com.google.dagger:hilt-android-gradle-plugin:2.38.1"
}
}
build.gradle:app
中配置
plugins {
id "kotlin-kapt"
id "dagger.hilt.android.plugin"
}
dependencies {
// hilt
implementation "com.google.dagger:hilt-android:$hiltVersion"
kapt "com.google.dagger:hilt-compiler:$hiltVersion"
implementation "androidx.hilt:hilt-navigation-compose:$hiltComposeVersion"
implementation "androidx.hilt:hilt-lifecycle-viewmodel:$hiltComposeVersion"
kapt "androidx.hilt:hilt-compiler:$hiltCompilerVersion"
}
程序入口配置
@HiltAndroidApp
class MyApplication : MultiDexApplication() {
// ...
}
添加Application
import android.annotation.SuppressLint
import android.app.Application
import android.content.Context
import dagger.hilt.android.HiltAndroidApp
/**
* 1. 所有使用 Hilt 的 App 必须包含 一个使用 @HiltAndroidApp 注解的 Application
* 2. @HiltAndroidApp 将会触发 Hilt 代码的生成,包括用作应用程序依赖项容器的基类
* 3. 生成的 Hilt 组件依附于 Application 的生命周期,它也是 App 的父组件,提供其他组件访问的依赖
* 4. 在 Application 中设置好 @HiltAndroidApp 之后,就可以使用 Hilt 提供的组件了,
* Hilt 提供的 @AndroidEntryPoint 注解用于提供 Android 类的依赖(Activity、Fragment、View、Service、BroadcastReceiver)等等
* Application 使用 @HiltAndroidApp 注解
*/
@HiltAndroidApp
class MyApp : Application() {
companion object {
@SuppressLint("StaticFieldLeak")
lateinit var CONTEXT: Context
}
override fun onCreate() {
super.onCreate()
CONTEXT = this
}
}
修改manifest.xml
<application
android:name=".MyApp"
>
</application>
使用
state
定义一个viewmodel
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.lifecycle.ViewModel
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
@HiltViewModel
class LoginViewModel @Inject constructor(): ViewModel() {
var viewStates by mutableStateOf(LoginViewState())
private set
fun login() {
// ...
}
}
data class LoginViewState(
val username: String = "",
val password: String = "",
)
在view中注入viewModel
import androidx.compose.runtime.Composable
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.ViewModel
@Composable
fun LoginPage(
viewModel: LoginViewModel = hiltViewModel()
) {
// ...
}
参考
本文作者:七つ一旋桜
本文链接:https://www.cnblogs.com/poifa/p/16319525.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步