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
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或更高版本。
| 归档时间: |
|
| 查看次数: |
1644 次 |
| 最近记录: |