如何在不使用 @Composable 注释的情况下为撰写函数创建扩展?
Posted
技术标签:
【中文标题】如何在不使用 @Composable 注释的情况下为撰写函数创建扩展?【英文标题】:How to create an extension for compose functions without using @Composable annotation? 【发布时间】:2022-01-23 18:38:10 【问题描述】:问题描述
我正在为使用自定义视图的撰写函数创建一个抽象:
@Composable
fun DisposeBanner(bannerView: BannerView)
DisposableEffect(key1 = true)
onDispose
bannerView.destroyAd()
但是,由于这个函数实际上并不渲染任何组件,我不希望它坚持使用 @Composable 标记,而是表明它只能通过扩展在 compose 函数中使用。
我的失败尝试
尝试做的时候:
fun Composable.disposeBanner(bannerView: BannerView)
DisposableEffect(key1 = true)
onDispose
bannerView.destroyAd()
我收到一条错误消息:“@Composable 调用只能在 @Composable 函数的上下文中发生”
有没有可能做我想做的事?
【问题讨论】:
【参考方案1】:Composable 是一个函数。您不能对功能进行扩展。并且错误清楚地表明您正在尝试在不可组合的函数中使用可组合的 DisposableEffect
函数(这是一个不呈现任何 ui 的普通可组合函数)。
你想多了。有很多不呈现任何 UI 的组合组件。 @Composable
注解不会以任何方式绑定到 UI。所以做一个不渲染任何东西的可组合函数是完全完全没问题的
【讨论】:
以上是关于如何在不使用 @Composable 注释的情况下为撰写函数创建扩展?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用视图集的情况下序列化 Django 中的注释字段?
Spring Boot - 如何在不使用 spring 注释的情况下在运行时获取端口