Android Studio不使用应用程序类来渲染预览。因此,依赖项注入不起作用。
这个
suggested workaround
这是为了创建另一个可组合的,它从视图模型中获取参数。
例如,如果您有一个名为
ShoppingCartScreen
在其中注入视图模型,创建另一个具有名称的屏幕
ShoppingCartScreenContent
.
购物车屏幕
然后从视图模型中提取所有数据,并将其作为参数传递到
购物车屏幕内容
.
或者,两种可堆肥都可以有相同的名称。它们只是因参数类型而异。
在您的情况下,您可以这样重构它:
@Composable
fun MainScreen(){
val addressViewModel = getAddressViewModel()
val address by addressViewModel.addressApiResponse.observeAsState(initial = null)
val onClick = remember { addressViewModel.callAddressApi() }
MainScreen(address, onClick)
}
@Composable
fun MainScreen(address: Address, onClick: () -> Unit){
Column(
modifier = Modifier
.fillMaxWidth()
.height(100.dp),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Button(
onClick = onClick,
modifier = Modifier
.fillMaxWidth()
.height(40.dp)
.padding(start = 40.dp, end = 40.dp)
) {
Text(text = address?.mailBox ?: "Country")
}
Spacer(modifier = Modifier.height(20.dp))
Text(
text = address?.fullAddress ?: "Full Address",
modifier = Modifier.padding(start = 40.dp, end = 40.dp)
)
}
}
@Preview
@Composable
fun MainScreenPreview(){
MainScreen(
address = Address(), // Create some dummy data here
onClick = {}
)
}