这个 kotlin jetpack compose 代码示例中的“提供”语法是啥?

Posted

技术标签:

【中文标题】这个 kotlin jetpack compose 代码示例中的“提供”语法是啥?【英文标题】:What is this "provides" syntax in this kotlin jetpack compose code sample?这个 kotlin jetpack compose 代码示例中的“提供”语法是什么? 【发布时间】:2022-01-22 05:24:42 【问题描述】:

此代码示例中的“provides”语法是什么?它的作用是什么?

LocalContentAlpha provides ContentAlpha.medium

它似乎不是标准的 kotlin 关键字,而且我在谷歌上搜索“kotlin 提供关键字”或“jetpack compose 提供”之类的查询并不幸运。

这显示在Jetpack Compose codelab,下面是完整的sn-p。

@Composable
fun PhotographerCard() 
    Column 
        Text("Alfred Sisley", fontWeight = FontWeight.Bold)
        // LocalContentAlpha is defining opacity level of its children
        CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.medium) 
            Text("3 minutes ago", style = MaterialTheme.typography.body2)
        
    


@Preview
@Composable
fun PhotographerCardPreview() 
    LayoutsCodelabTheme 
        PhotographerCard()
    

【问题讨论】:

如果您在 android Studio 中对此类关键字或相邻单词按 CTRL+B,您将看到这些关键字的完整文档。几乎没有耐心,我想有办法找到它的作用;) 【参考方案1】:

这是infix function 的示例:

用中缀关键字标记的函数也可以使用中缀表示法调用(调用时省略点和括号)。

从method's documentation 上存在infix 关键字可以看出。

因此方法可以正常调用为LocalContentAlpha.provides(ContentAlpha.medium),但中缀表示法允许删除那些额外的语法字符。

【讨论】:

以上是关于这个 kotlin jetpack compose 代码示例中的“提供”语法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin 1.5.0 上的 Jetpack Compose

Kotlin Jetpack Compose remember 给Icon添加透明度

Kotlin jetpack compose Tab的渲染 AnimatedVisibility的使用

Kotlin jetpack compose 文本输入框ExitText/TextField remember 居然可以传两个参数

Jetpack Compose开源:基于Kotlin的响应式编程方案,简化UI开发

Android Kotlin Jetpack Compose UI框架 完全解析