批里批里 (゜-゜)つ🍺 干杯|

七つ一旋桜

园龄:4年2个月粉丝:6关注:3

2022-05-28 00:03阅读: 114评论: 0推荐: 0

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 中国大陆许可协议进行许可。

posted @   七つ一旋桜  阅读(114)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起