预览版不支持具有非默认参数的可组合函数,除非使用 @PreviewParameter 进行注释

Sat*_*ale 14 android higher-order-functions kotlin android-jetpack android-jetpack-compose

我有一个Composable带有 lambda 的函数,用于获取按钮单击操作。我想预览一下这个Composable功能。但是使用这种 lambda 的可组合函数在添加@Preview上面的注释后会出现错误@Composable

Composable functions with non-default parameters are not supported in Preview unless they are annotated with @PreviewParameter.

可组合函数看起来像

@Composable
fun MyView(onViewButtonClick: () -> Unit) {
Button(
            enabled = isEnabled, colors = ButtonDefaults.buttonColors(
                backgroundColor = greenColor
            ),
            shape = Shapes.large, onClick = (onViewButtonClick),
            modifier = Modifier
                .fillMaxWidth()
                .padding(15.dp, 40.dp, 15.dp, 15.dp)
        ) {
            Text(
                text = stringResource(id = R.string.send_otp),
                color = Color.White,
                fontSize = 20.sp
            )
        }
 }
Run Code Online (Sandbox Code Playgroud)

这个的应用看起来像

MyView(onViewButtonClick = {
                Log.d("ViewButtonClick","ViewButtonClick")
            }). 
Run Code Online (Sandbox Code Playgroud)

如何使用 Lambda 查看此可组合函数的预览?

pti*_*nou 15

为您的可组合项提供默认 lambda,或者在预览中实现一个空 lambda

@Composable
fun MyView(onViewButtonClick: () -> Unit = {}) {
Button(
            enabled = isEnabled, colors = ButtonDefaults.buttonColors(
                backgroundColor = greenColor
            ),
            shape = Shapes.large, onClick = (onViewButtonClick),
            modifier = Modifier
                .fillMaxWidth()
                .padding(15.dp, 40.dp, 15.dp, 15.dp)
        ) {
            Text(
                text = stringResource(id = R.string.send_otp),
                color = Color.White,
                fontSize = 20.sp
            )
        }
 }

@Preview
@Composable
fun MyViewPreview() {
    MyView()
}
Run Code Online (Sandbox Code Playgroud)

或者

@Composable
fun MyView(onViewButtonClick: () -> Unit) {
Button(
            enabled = isEnabled, colors = ButtonDefaults.buttonColors(
                backgroundColor = greenColor
            ),
            shape = Shapes.large, onClick = (onViewButtonClick),
            modifier = Modifier
                .fillMaxWidth()
                .padding(15.dp, 40.dp, 15.dp, 15.dp)
        ) {
            Text(
                text = stringResource(id = R.string.send_otp),
                color = Color.White,
                fontSize = 20.sp
            )
        }
 }

@Preview
@Composable
fun MyViewPreview() {
    MyView(onViewButtonClick = {})
}
Run Code Online (Sandbox Code Playgroud)


Bha*_*ani 6

正如问题在这里定义的那样,不支持具有非默认参数的可组合函数。这意味着 Composable 函数中应该定义一个默认值,或者如果您使用自定义模型,则使用PreviewParameter

@Preview(showBackground = true)
@Composable
fun Greeting(name: String = "Bharat") {
Surface(modifier = Modifier
    .fillMaxHeight()
    .fillMaxWidth()) {
    Text(text = "Hello $name!")
  }
}


@Preview   
@Composable
fun UserProfilePreview(
@PreviewParameter(UserPreviewParameterProvider::class) user: User) 
    {
       UserProfile(user)
    }
Run Code Online (Sandbox Code Playgroud)