You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Android Jetpack Compose中,为子Composable定义ViewModel是否为不良实践?

在Composable中嵌入专属ViewModel是否属于不良实践?

通常大家都认为一个屏幕对应多个ViewModel是不良实践,但在某些特殊场景下,我发现这种方式很实用。比如一个显示网络状态的StatusBar Composable:通过Hilt将ViewModel封装在Composable内部,既可以让这个组件在各个屏幕复用,又不会让屏幕的ViewModel被网络状态相关逻辑污染。但问题是,这种做法会导致Android Studio的预览功能失效——因为预览不支持ViewModel。

我现在的疑问是:这种做法到底算不算不良实践?还是说应该在每个使用该Composable的屏幕ViewModel中重复编写相关逻辑?

代码示例

ViewModel.kt

@HiltViewModel
class OfflineStatusBarViewModel @Inject constructor(
    networkState: NetworkState,
) : ViewModel() {
    val isOffline = networkState.isAvailable
        .map { !it }
        .stateIn(viewModelScope, WhileUiSubscribed, false)
    
}

StatusBar.kt

@Composable
fun OfflineStatusBar(
    modifier: Modifier = Modifier,
    viewModel: OfflineStatusBarViewModel = hiltViewModel()
) {
    val isVisible by viewModel.isOffline.collectAsState()
    if (isVisible) {
        OfflineIndicator(modifier = modifier)
    }
}

内容的提问来源于stack exchange,提问作者Mirco Bellagamba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 10:16:02