为项目列表重用@Composable容器


data class object1()
data class object2()

在我的@Composable屏幕上,我有2个选项卡,每个选项卡都显示一个列表。

when (tabToDisplay) {
TabCategory.1-> Section1(list = listOf<object1>())
TabCategory.2-> Section2(list = listOf<object2>())
}

@Section1@Section2

可组合
Column(){
list.forEach {
UiItem1()
//or
UiItem2()
}
}

内部唯一的区别是我创建的项目的类型。

问题:我如何简化我的代码只有1@Composable节为我的列表对象

您可以向Section添加一个通用参数和一个内容构建器:

@Composable
fun<T> Section(list: List<T>, itemContent: @Composable (T) -> Unit) {
Column(){
list.forEach {
itemContent(it)
}
}
}

那么你可以这样写:

when (tabToDisplay) {
TabCategory.1 -> {
Section(list = listOf<Object1>()) {
UiItem1(it)
}
}
TabCategory.2 -> {
Section(list = listOf<Object2>()) {
UiItem2(it)
}
}
}

注。根据kotlin风格指南,类应该用PascalCase命名。当你习惯了这一点,它将提高你的开发速度,因为你的眼睛将更容易识别代码中的变量/类。它在大多数开发命令中也是必需的,所以最好马上习惯它。

为两个模型创建一个parentClass,设为ParentObjClazz

保留一个可组合的@Section,它包含TabCategoryParentObjClazz的列表

@Composable
fun Section(tabCategory: TabCategory, list: List<ParentObjClazz>) {
//...
}

转换对象并根据tabCategory或子类type检查来填充视图

相关内容

  • 没有找到相关文章

最新更新