预览版不支持创建 ViewModel

mus*_*sso 12 android-jetpack-compose

我按照官方指南创建viewModel实例,它运行良好。但是,当 中存在任何内容viewModel@composable,Android Studio 无法呈现预览和错误代码ViewModels creation is not supported in Preview。有人有任何解决方案吗?

PS使用撰写版本 1.0.0-alpha06

C. *_*ann 18

您可以使用如下所示的方法,该方法将显示在下面推荐的视频中:

@Composable
fun TestView(
    action: MainActions,
    viewModel: OnboardViewModel = getViewModel()
) {
    TestUI(onClick = viewModel.clickMethod())
}

@Composable
fun TestUI(onClick: () -> Unit) {}

@Preview
@Composable
fun TestUIPreview() {
    MaterialTheme() {
        TestUI(onClick = {})
    }
}
Run Code Online (Sandbox Code Playgroud)

此视频中所选时间有来自 google 的推荐:https://youtu.be/0z_dwBGQQWQ ?t=573

  • 我正在使用 hilt,当我使用 `= hiltViewModel()` 时,它仍然显示:“预览版不支持 ViewModels 创建” (20认同)

Bli*_*fer 13

我有完全相同的问题。解决方案是:使用接口扩展 ViewModel

撰写视图:

@Composable
fun MyScreen(myVm: IMyViewModel = MyViewModel()) {
    Text(text = myVm.getTextA())
}


@Preview()
@Composable
fun MyScreenPreview() {
    MyScreen(myVm = MyViewModelPreview())
}
Run Code Online (Sandbox Code Playgroud)

视图模型:

abstract class IMyViewModel : ViewModel(){
    abstract val dynamicValue: StateFlow<String>
    abstract fun getTextA() : String
}

class MyViewModel : IMyViewModel() {
    private val _dynamicValue: MutableStateFlow<String> = MutableStateFlow("")
    override val dynamicValue: StateFlow<String> = _dynamicValue

    init {
    }

    override fun getTextA(): String {
        return "Details: ${EntityDb.getAllEntities().lastOrNull()?.details}"
    }
}

class MyViewModelPreview(override val dynamicValue: StateFlow<String> =    MutableStateFlow("no data")) : IMyViewModel() {
    override fun getTextA(): String {
        return ""
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 6

由于LiveEdit现已可用,您不再需要对整个屏幕使用 Compose Preview ViewModel只需使用Live Edit调试应用程序即可。这也是 Flutter 中“热重载”的实现方式。在 Flutter 中甚至没有像 Compose Preview 这样的东西。

我建议仅对没有ViewModel.

因此,您不必编写所有这些样板代码,将ViewModel基元从子可组合项扩展或传递给子ViewModel可组合项。

请记住,使用 LiveEdit 的一项要求是使用AndroidStudio Flamingo或更高版本。