如何构建 Jetpack Compose 项目?

How to structure a Jetpack Compose project?

我是 Android 和 Jetpack Compose 的新手。使用 Views 屏幕是在不同的 Fragments 或 Activity 中定义的,但是使用 Compose 时,所有屏幕看起来都是在 MainAcitivity 中定义的。使用 Compose 时,为不同屏幕构建屏幕代码的最佳方式是什么?这里有任何最佳实践指南吗?

我想这完全取决于您 and/or 您的团队。 我在一个真正的多模块项目中使用 compose 并遵循这种方法:

  • core/components:common/generic 整个应用程序使用的组件。
  • core/theme::类与应用主题相关。
  • [feature]/components:与上一个包不同的是,这个包包含跨屏幕共享的相同功能的组件。当然 if/when 一个组件被两个或多个功能使用,它应该被提升到 core/components 包。
  • [feature]/screens:包含与给定功能相关的屏幕。
  • [feature]/navigation:这是 NavHost 和其他与导航相关的 类 所在的位置。

我认为没有“最好”的代码结构方式,这取决于项目的大小和您的偏好。但我是这样组织我的 compose 项目的 UI 层的:

  • screens:包含包含屏幕特定组件和最终视图模型的包,如 home
  • Navigation.kt:包含用于管理应用程序导航的 NavHost and other navigation-related utils. I use the navigation-compose 库。
  • screens/shared:包含 类 or/and 不特定于单个屏幕的功能,例如:在不同屏幕或共享视图模型中使用的可重用组件。
  • MainActivity:将包含 NavHost 的可组合项设置为其内容。
  • GameResApplication:没有什么特别之处,我创建它是因为我正在使用 Hilt
  • theme:由 Android Studio 创建。
  • utils:我在 @Preview 可组合项中使用的一些 UI 实用程序和虚假数据。

这是github

上的真实项目示例