Kotlin Multiplatform Development Help

通用ViewModel

使用Compose Multiplatform可以在通用代码中实现Android的ViewModel构建UI方案。

在项目中添加通用ViewModel

要使用跨平台ViewModel实现,请向commonMain源集添加以下依赖:

kotlin { // ... sourceSets { // ... commonMain.dependencies { // ... implementation("org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-compose:2.8.2") } // ... } }

在通用代码中使用ViewModel

Compose Multiplatform实现了通用的ViewModelStoreOwner接口,因此在通用代码中使用ViewModel类与Android最佳实践差异不大。

导航示例为例:

  1. 声明ViewModel类:

import androidx.lifecycle.ViewModel import androidx.lifecycle.viewmodel.compose.viewModel class OrderViewModel : ViewModel() { private val _uiState = MutableStateFlow(OrderUiState(pickupOptions = pickupOptions())) val uiState: StateFlow<OrderUiState> = _uiState.asStateFlow() // ... }
  1. 将ViewModel添加到可组合函数中:

@Composable fun CupcakeApp( viewModel: OrderViewModel = viewModel { OrderViewModel() }, ) { // ... }

在非JVM平台上,无法通过类型反射实例化对象。因此在通用代码中调用viewModel()函数时必须提供初始化器参数:每次创建ViewModel实例时至少需要传入一个初始化器。

如果仅提供初始化器,库会在底层创建默认工厂。但您也可以实现自定义工厂,并调用更显式版本的通用viewModel(...)函数, 这与Jetpack Compose中的用法一致。

22 四月 2025