繁体   English   中英

如何将颜色从一个 Composable 传递到另一个?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM