如何在不使用 @Composable 注释的情况下创建 compose 函数的扩展?

Pie*_*ira 2 android kotlin android-jetpack-compose

问题描述

我正在为使用自定义视图的撰写函数创建一个抽象:

@Composable
fun DisposeBanner(bannerView: BannerView) {
    DisposableEffect(key1 = true) {
        onDispose {
            bannerView.destroyAd()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,由于这个函数实际上并不渲染任何组件,我不希望它坚持 @Composable 标记,而是表明它只能通过扩展在组合函数中使用。

我失败的尝试

当尝试这样做时:

fun Composable.disposeBanner(bannerView: BannerView) {
    DisposableEffect(key1 = true) {
        onDispose {
            bannerView.destroyAd()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息:“@Composable 调用只能在 @Composable 函数的上下文中发生”

可以做我想做的事吗?

Nek*_*cer 7

可组合性是一个函数。您不能对函数进行扩展。该错误清楚地表明您正在尝试在不可组合函数中使用可组合DisposableEffect函数(这是一个不呈现任何 ui 的普通可组合函数)。

你想太多了。有很多可组合项不呈现任何 UI。@Composable注释不以任何方式绑定到 UI。所以做一个不渲染任何东西的可组合函数是完全没问题的