我如何使用 Hilt 将 Viewmodel 放入可组合项中

How I can get Viewmodel inside composable using Hilt

我正在使用 hilt 进行依赖项注入,我找不到直接在可组合内部获取视图模型的方法,因为我们不能将 @AndroidEntryPoint 注释与 compose 一起使用,当我从 activity..

像这样..

@HiltViewModel
class MyVm @Inject constructor(
  private val someDep: SomeDep,
) : ViewModel() {}

我的看法——在这种情况下考虑它的片段

@AndroidEntryPoint
class MYFragment : Fragment() {
  private val viewModel: MyVm by viewModels()

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
    return ComposeView(requireContext()).apply {
      setContent {
        MYTheme {
          MyTopLevelComposableScreen(
            viewModel = viewModel
          )
        }
      }
    }
  }
}

还有我的顶级可组合项

@Composable
fun MyTopLevelComposableScreen(vm:MyVm){
}

或直接在顶级可组合项中

    @Composable
    fun MyTopLevelComposableScreen(vm: MyVm = viewModel()){
    }

https://developer.android.com/jetpack/compose/libraries#hilt

你可以像这样注入你的 viewModel

@Composable fun MainScreen(viewModel: HomeScreenViewModel = hiltViewModel())

您可以在此 link 中查看我的示例项目以获取更多信息 github

首先,实现这个模块:

implementation("androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07")

而且,你可以这样使用它:

@Composable
private fun MyLayout() {
    val vm: MyViewModel = viewModel() // @HiltViewModel
...

[Android developer guideline]