How to Parcelize data class in jetpack compose

问题描述 投票:0回答:2

我有数据类,一个变量是

Color
的类型。我有逻辑来存储不同类型的颜色以在 UI 中显示,即

data class SubTitleModel(
    val text: String,
    val textColor: Color = Color.Black
) 

当我从一项活动转到另一项活动时,我必须使用

@Parcelize

import android.os.Parcelable
import kotlinx.parcelize.Parcelize

@Parcelize
data class SubTitleModel(
    val text: String,
    val textColor: Color = Color.Black
) : Parcelable

它给我错误

Color

Type is not directly supported by 'Parcelize'. Annotate the parameter type with '@RawValue' if you want it to be serialized using 'writeValue()'

那是什么意思?如何解决这个问题呢?请提供详细的解释和适当的参考。谢谢

android kotlin android-jetpack-compose android-jetpack
2个回答
1
投票

另一种选择是传递 Int 或 Long 而不是传递 Compose Color 例如

data class SubTitleModel(
    val text: String,
    val textColor: Int = (0xFF000000).toInt()
)

然后在你的用户界面中

@Preview
@Composable
private fun Test() {
    val modelList = listOf(
        SubTitleModel(
            text = "SomeText"
        ),
        SubTitleModel(
            text = "SomeText2",
            textColor = Color.Red.toArgb()
        ),
        SubTitleModel(
            text = "SomeText3",
            textColor = Color.Green.toArgb()
        )
    )

    Column(
        modifier = Modifier
            .fillMaxSize()
            .padding(20.dp)
            .border(2.dp, Color.Red)
    ) {
        modelList.forEach { model: SubTitleModel ->
            Text(text = model.text, color = Color(model.textColor))
        }
    }
}

0
投票

您需要为该值使用

@RawValue
注释。 尝试像这样修改
textColor

val textColor: @RawValue Color = Color.Black
© www.soinside.com 2019 - 2024. All rights reserved.