为了练习在JetpackCompose中使用可重用组件,我开始了一个小练习。2见下图。
我想象绿色行、输入行和中间的行具有相同的结构。第一个元素获得可用空间,第二个元素获得50.dp,最后一个元素获得70.dp。我尝试将宽度分离为变量,并将此变量作为修饰符传递给行中的单个元素。我想如果我需要额外的字段,我可以毫无问题地扩展它。
代码无效!
@Composable
fun groundComponent(
modifier: Modifier = Modifier,
spaceBetween: Dp = 0.dp,
color: Color,
content: @Composable () -> Unit
) {
Surface(
color = color
) {
Row(
modifier = modifier,
horizontalArrangement = Arrangement.spacedBy(spaceBetween)
) {
content()
}
}
}
@Composable
fun inputSection() {
val firstRowWidth = 1F
val secondRowWidth = 70.dp
val thirdRowWidth = 50.dp
Text("Add Ingredient")
groundComponent(color = Color.Green){
Text( text="Ingredient", modifier = Modifier.weight(firstRowWidth ))
Text( text="Amount", modifier = Modifier.widthIn(secondRowWidth ))
Text( text="Unit", modifier = Modifier.widthIn(thirdRowWidth ))
}
groundComponent{
Text( text="Sugar", modifier = Modifier.weight(firstRowWidth ))
Text( text="500", modifier = Modifier.widthIn(secondRowWidth ))
Text( text="gr", modifier = Modifier.widthIn(thirdRowWidth ))
}
groundComponent{
Text( text="Carrot", modifier = Modifier.weight(firstRowWidth ))
Text( text="1.5", modifier = Modifier.widthIn(secondRowWidth ))
Text( text="kg", modifier = Modifier.widthIn(thirdRowWidth ))
}
groundComponent{
TextField(
value = "newIngredient",
onValueChange = {},
modifier = Modifier.weight(firstRowWidth ))
TextField(
value = "newAmount",
onValueChange = {},
modifier = Modifier.widthIn(secondRowWidth )
)
TextField(
value = "newUnit",
onValueChange = {},
modifier = Modifier.widthIn(thirdRowWidth )
)
}
Button(onClick={}){Text("add")}
}
我得到了几个错误与。重量修饰符。那么如何是正确的方法来解决这样的情况。
谢谢你!
2条答案
按热度按时间ykejflvf1#
Modifier.weight是一个在特定作用域中定义的修饰符,例如RowScope和ColumnScope。要使用在特定作用域中定义的修饰符,您需要将Receiver. BoxScope添加到您的内容中,作为为示例定义的Modifier.align(),您可以定义您的作用域。
同样在InputSection中,您将重量分数定义为
这些值应彼此成比例
例如,如果设置为1/5/6,或者在0 f-1f之间
按照惯例,您可以用大写首字母命名Composable,因为它们被视为小部件。
t98cgbkg2#
谢谢你的回复和你很好的解释!在你的帮助下,我用这种方式解决了我的问题。
现在这种做法对吗?