Chaining Modifier 基于 Android Compose 中的特定条件

Chaining Modifier based on certain conditions in Android Compose

我想以这样的方式应用修饰符,如果提供了宽度,它应该使用提供的宽度,否则使用可用的最大宽度。

我正在按以下方式应用修改器,但结果与预期不符。 视图宽度变得混乱。在此请求指导。

val myModifier = Modifier.padding(
    start = 4.dp, end = 4.dp, top = 8.dp, bottom = 8.dp
)

if (viewWidth == null)
    myModifier.then(Modifier.fillParentMaxWidth(1f))
else
    myModifier.then(Modifier.width(viewWidth))

myModifier.then(
    Modifier.height(viewHeight ?: 100.dp)
        .clickable(onClick = { listener.onItemClick(item) })
)

Modifier 有一个 then 函数来连接当前修饰符和另一个修饰符。这个then函数returns一个你没用过的新修饰符。您必须使用返回的修饰符重新初始化 myModifier 变量。

检查以下代码:

var myModifier = Modifier.padding(
    start = 4.dp, end = 4.dp, top = 8.dp, bottom = 8.dp
)

if (viewWidth == null)
  myModifier = myModifier.then(Modifier.fillParentMaxWidth(1f))
else
  myModifier = myModifier.then(Modifier.width(viewWidth))

myModifier = myModifier.then(
  Modifier
    .height(viewHeight ?: 100.dp)
    .clickable(onClick = { listener.onItemClick(item) })
)