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

ste*_*wpf 5 android android-jetpack-compose jetpack-compose-navigation

使用 Jetpack Compose 导航时,是为所有屏幕使用一个 ViewModel 还是为每个屏幕使用一个 ViewModel?有这方面的架构指导吗?如果要使用多个 ViewModel,将在哪里实例化它们?

Ste*_*ail 6

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

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

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

至于实例化部分,您可以遵循建议的(无DI)方式,即:

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

@Composable
fun MyExample(
    viewModel: ExampleViewModel = viewModel()
) {
    // use viewModel here
}
Run Code Online (Sandbox Code Playgroud)

或者您可以(并且可能应该)使用 DI 库,例如HiltKoin

  • 感谢您提示我们可以直接从 Composable 获取 ViewModel。这正是我所缺少的部分(学习希尔特将是下一步)。非常感谢! (4认同)