从可组合项中抛出异常

Throw exception from a Composable

我写了一个提供 IconButton 的简单可组合项。

@Composable
fun MenuIcon(
    @DrawableRes iconRes: Int,
    contentDescription: String,
    onClick: () -> Unit,
) {
    if (contentDescription.isEmpty()) {
        throw IllegalArgumentException("contentDescription is mandatory and should not be empty.")
    }
    // I also tried assert(contentDescription.isNotEmpty())

    IconButton(onClick = onClick) {
        Image(
            painter = painterResource(id = iconRes),
            contentDescription = contentDescription,
        )
    }
}

在我们的项目中,我们希望强制我们的开发人员提供内容描述以实现可访问性目的。所以我添加了一个简单的检查以在 contentDescription 为空时抛出异常。

问题如下:当抛出异常时,在 Logcat 中,我得到另一个未指向我的可组合对象的异常:

java.lang.IllegalStateException: pending composition has not been applied
[...]

它不会帮助使用我的可组合项的开发人员发现问题... 有显示我的错误消息的解决方案吗?

谢谢!

从线程中抛出异常,这样你就可以确保堆栈中没有任何东西捕获它并搞乱你预期的崩溃:

if (contentDescription.isEmpty()) {
    thread(name = "WatchdogThread") {
        throw IllegalArgumentException("...")
    }
}

不必担心优化(不使用线程池或协程),因为您只希望内容描述在调试版本中为空。

干杯