【问题标题】:Why can't I use `AnimatedVisibility` in a `BoxScope`?为什么我不能在“BoxScope”中使用“AnimatedVisibility”?
【发布时间】:2021-06-14 18:39:55
【问题描述】:

我的布局如下所示:

Row {
        ...

        Box(
            modifier = Modifier
                .fillMaxHeight()
                .width(50.dp)
        ) {
            AnimatedVisibility(
                visible = isSelected && selectedAnimationFinished,
                enter = fadeIn(),
                exit = fadeOut()
            ) {
                ...
            }
        }
    }

但是我得到了编译时错误:

fun RowScope.AnimatedVisibility(visible: Boolean, modifier: Modifier = ..., enter: EnterTransition = ..., exit: ExitTransition = ..., content: AnimatedVisibilityScope.() -> Unit): Unit' can't be called in this context by implicit receiver. Use the explicit one if necessary

似乎 Kotlin 发现 AnimatedVisibility 函数不明确,因为 Compose 公开了多个具有相同签名的 AnimatedVisibility 函数:有一个 fun AnimatedVisibility 没有接收器,还有一个 fun RowScope.AnimatedVisibility 需要 RowScope

据我所知,Kotlin 抱怨我错误地使用了RowScope 版本,但我只想使用没有接收器的版本!

使用this.AnimatedVisibility 也无济于事。

我发现唯一可行的解​​决方法是完全限定名称,例如androidx.compose.animation.AnimatedVisibility(...)。但我不知道为什么会这样。

任何人都可以对此有所了解吗?有没有比完全限定名称更好的选择?

【问题讨论】:

  • 作为别名导入
  • 也尝试导入为别名,没有帮助
  • 这没有意义。好的,您将正确的版本导入为别名,然后,假设您使用的是Android Studio,当您键入该名称时,代码完成会诱使您,在回车之前,只需在弹出窗口的右侧检查是否导入的别名正在建议或默认的 AnimatedVisibility。我知道这听起来微不足道,但却是一个明显的陷阱。只需检查一次
  • 我同意伙计,只是没有意义。所有重载都具有相同的包和名称,这意味着 all 重载只有 1 个导入(看起来像 androidx.compose.animation.AnimatedVisibility)。由于这个原因,别名并没有帮助 - 如果我为这个导入设置别名,我也会同时对所有其他重载进行别名。

标签: android android-jetpack-compose


【解决方案1】:

一种解决方法是使用完全限定名称:

Box {
    androidx.compose.animation.AnimatedVisibility(visibile = ...) {
        ...
    }
}

【讨论】:

  • 谢谢,但我的问题是“有没有比完全限定名称更好的选择?”
【解决方案2】:

看起来这是语言中的一个错误 - 重载解析不知道 @DslMarkers 之类的东西。我在 Kotlin bugtracker 上找不到相关问题,所以我自己提交了一个 - https://youtrack.jetbrains.com/issue/KT-48215

【讨论】:

  • 这太疯狂了,非常感谢您提供的信息和打开错误问题!
猜你喜欢
  • 2021-05-20
  • 2015-04-02
  • 2012-05-02
  • 2017-03-30
  • 2015-09-03
  • 2017-03-29
  • 2021-02-06
  • 2014-05-02
  • 2011-03-06
相关资源
最近更新 更多