Jetpack Compose 导航组件会使用多少个 ViewModel?

How many ViewModels would one use with Jetpack Compose navigation component?

使用 Jetpack Compose 导航时,是为所有屏幕使用一个 ViewModel 还是为每个屏幕使用一个 ViewModel?对此有任何架构指导吗?如果要使用多个 ViewModel,应该在哪里实例化它们?

在软件架构设计方面我不是专业人士,但我认为这完全取决于您的应用程序的结构。 Compose 基本上是一个 UI 框架,它不能替代 ViewModel。这意味着您仍然可以灵活地按照自己认为合适的方式进行操作。

例如,如果您有多个不同的屏幕(即登录、主页、设置等),您最好为每个屏幕使用单独的 ViewModel。如果您有一个非常简单的 one-pager,您可以使用单个 ViewModel。

official docs 对如何构建您的应用程序有很好的描述。显然,您应该进行任何必要的调整,以使架构适合您的项目需求和目标。

关于实例化部分,你可以按照suggested (no D.I.) way,即:

class ExampleViewModel : ViewModel() { /*...*/ }

@Composable
fun MyExample(
    viewModel: ExampleViewModel = viewModel()
) {
    // use viewModel here
}

或者您可以(并且可能应该)使用 D.I。 Hilt or Koin.

等库