[英]How to pass an image from one composable function to another in Jetpack Compose?
[英]How to pass a color from one Composable to another?
如何将颜色从一个 Composable 传递到另一个? 问题是有问题的颜色值“无法重新分配”,所以我似乎无法将它作为参数传递。
所以,基本上,这是来自第一个 Composable 的片段:
val buttonColor = when (index) {
0 -> if (isEnabled) Color(0xff81C784)
else disabledColor
1 -> if (isEnabled) Color(0xff9575CD)
else disabledColor
2 -> if (isEnabled) Color(0xffFF8A65)
else disabledColor
3 -> if (isEnabled) Color(0xff5C6BC0)
else disabledColor
else -> Color.Unspecified
}
Button(modifier = Modifier.padding(10.dp).height(60.dp),
elevation = ButtonConstants.defaultElevation(8.dp),
colors = ButtonConstants.defaultButtonColors(
backgroundColor = buttonColor
),
我想在第二个 Composable 中使用该 buttonColor 作为强调色:
CustomToggle(color = color,
selected = isDisabled.value,
onSelected = {
isDisabled.value = !isDisabled.value
when (index) {
}
}
)
我的想法只是在我的父可组合中引入颜色作为参数:
@Composable
fun MainInterface(context: Context, color: Color) {
[...]
bodyContent = {
ScrollableColumn(horizontalAlignment = CenterHorizontally) {
QuickOptions(context, color)
Spacer(modifier = Modifier.height(40.dp))
SoundOptions(color)
}
}
但我不能,因为我不能将 buttonColor 作为参数传递...我试图将第二个 Composable 插入第一个内部,但我仍然无法将颜色传递给第二个 Composable。
所以我想我会解释我做了什么,希望它将来可以帮助其他人。
首先,在我的顶级可组合组件 Scaffold 中,我添加了可变的 state 变量。 然后是两个 Composables。 上面的一个改变了accentColor 的值,第二个接收新的值:
Scaffold(
...
bodyContent = {
val accentColor = remember { mutableStateOf(Color(0xff81C784)) }
QuickOptions(accentColor.value) { newColor ->
accentColor.value = newColor}
SoundOptions(accentColor = accentColor)
}
},
)
然后我指出了 colors 必须在第一个 Composable 的 onClick 事件中传递:
@Composable
fun QuickOptions(accentColor: Color, onColorChanged: (Color) -> Unit) {
...
onClick = {
if (isSelectable == true) {
val newColor = when (index) {
0 -> Color(0xff81C784)
1 -> Color(0xff9575CD)
2 -> Color(0xffFF8A65)
3 -> Color(0xff9FA8DA)
else -> Color.Unspecified
}
onColorChanged(newColor)
... }
最后我把它传递给了第二个 Composable:
@Composable
fun SoundOptions(accentColor: MutableState<Color>) {
...
CustomToggle(
color = accentColor.value
) {}
}
祝你好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.