【问题标题】:Compose: Is there an EmptyView similar to Swiftui?Compose:有没有类似Swiftui的EmptyView?
【发布时间】:2022-12-20 01:05:15
【问题描述】:

在 iOS 上,这里有 EmptyView https://developer.apple.com/documentation/swiftui/emptyview。但我不知道如何在 Compose 上实现它。如果我有它,一些代码对我来说就容易多了。例如,

myList.map { item ->
   if item is XItem -> EmptyView()
   ....
}

别告诉我不需要,我只知道如何实现。谢谢。

【问题讨论】:

  • 这个空视图是否应该占据整个屏幕,或者它在非空视图中是否具有大小和位置?

标签: android android-jetpack-compose


【解决方案1】:

Compose 的构建方式与 SwiftUI 大不相同。

在 SwiftUI 中,您需要在两种情况下使用 EmptyView

  1. 当你有一个遗传参数并且在某些情况下它应该是空的 - 例如您需要定义一些默认类型,以防未指定参数。
  2. 当上下文要求您返回一些视图时。

    另一方面,Compose 本来就没有这样的问题,这就是为什么不存在这样的视图。

    如果 SwiftUI 会在空的 @ViewBuilder 块周围给你一个错误,Compose 会完全没问题。

    在您的示例中,您可以使用Unit

    myList.map { item ->
       if item is XItem -> Unit
       ....
    }
    

    或者只是空括号:

    myList.map { item ->
       if item is XItem -> { }
       ....
    }
    

    如果您发现确实需要一些空视图的情况,可以使用Box(Modifier) - 它将是一个零大小的空视图。

【讨论】:

    【解决方案2】:

    我认为您可以使用 Spacer 组件来显示空白区域。

    Spacer 接受 Modifier 对象作为参数,然后您可以使用此修改器来设置 Spacer 的宽度或高度或两者。

    例如,您可以在代码中绘制一个 Spacer,但这需要在可组合上下文或另一个可组合项中完成。

      @Composable
        fun MyComposable(){
        
        myList.map { item ->
           if item is XItem -> Spacer(modifier = Modifier.size(100.dp, 100.dp))
           ....
        }
    }
    

    【讨论】:

    • 那不是我想要的。
    【解决方案3】:

    您可以轻松地自己创建一个:

    @Composable
    fun EmptyView() {
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-01
      • 2014-11-26
      • 1970-01-01
      • 2019-08-04
      • 2020-03-11
      • 2014-09-09
      • 1970-01-01
      相关资源
      最近更新 更多