HÃ¥kon Pettersen
05/30/2022, 10:50 AM@Composable
fun List<SecuritySensor>.asListOfRowImageText() = asList {
    RowImageText(
        leadingIconRes = it.icon,
        text = { it.description },
        textStyle = MaterialTheme.typography.body1
    )
}
@Composable
private fun <T> List<T>.asList(
    withDividers: Boolean = false,
    itemBuilder: @Composable (T) -> Unit,
) = Column {
    forEachIndexed { index, item ->
        itemBuilder(item)
        if (withDividers && index < lastIndex) {
            EvaDivider()
        }
    }
}
I am currently getting warning message: Composable functions that return Unit should start with an uppercase letter . Is there a better way of creating compose functions to avoid getting this message?Mark Murphy
05/30/2022, 11:40 AMColumn() returns Unit, so your asList() extension function returns Unit. Your use of = masks that fact.
Is there a better way of creating compose functions to avoid getting this message?Off the cuff, FWIW, and by eyeball, I would try:
@Composable
private fun <T> CollectionColumn(
    collection: Collection<T>,
    divider: @Composable (() -> Unit)? = { EvaDivider() },
    itemBuilder: @Composable (T) -> Unit,
) {
    Column {
        collection.forEachIndexed { index, item ->
            itemBuilder(item)
            if (divider != null && index < lastIndex) {
                divider()
            }
        }
    }
}
AFAIK, there is nothing stopping you from using an UpperCamelCase function name on an extension function. However, I am not comfortable having an extension function of a model object type generate a composable UI.
This implementation also pulls out EvaDivider() into a composable slot parameter, so your function is more flexible. Pass in null to say that you do not want a divider.HÃ¥kon Pettersen
05/30/2022, 2:19 PM