从10月8日至10日加入我们,在纽约市了解关于 GraphQL Federation 和 API 平台工程的最新技巧、趋势和新闻。加入我们参加纽约市的 GraphQL Summit 2024
文档
免费开始

6. 向列表中添加更多信息


在本节中,您将使用Coil图片加载库来展示关于 的美好信息。您还将了解关于

请为您的查询添加更多信息

返回到 LaunchList.graphql。您的 已获取您想要显示的大部分信息,但是显示任务名称和徽标图片会更好。

查看Sandbox中的模式,您可以看到Launch 有一个 mission 属性,允许您获取任务细节。一个任务既有名字和一个 missionPatch 属性,而且 missionPatch 可以可选地接受一个参数来指定期望的图像大小。

由于加载带有大图像的LazyList可能会影响性能,请请求一个 SMALL 任务徽标。更新您的 query 以类似于以下:

app/src/main/graphql/LaunchList.graphql
query LaunchList {
launches {
launches {
id
site
mission {
name
missionPatch(size: SMALL)
}
}
}
}

当您重新编译时,如果在 LaunchListQuery.kt 中查看,您将看到一个新的嵌套类型 Mission,它包含了您请求的两个属性。

任何 GraphQL 都可以接受像上面的 arguments 这样的参数,并且参数可以是 或复杂类型。在这种情况下,SMALL 是GraphQL模式中的一个枚举。它可以接受有限的值列表。如果您查看Sandbox中的模式部分,您可以看到枚举的列表。然后您可以点击进去看到 PatchSize 只能接受两个值:SMALLLARGE

The patch size enum in Sandbox's Schema tab

显示字段

LaunchList.kt中,使用Coil的AsyncImage将GraphQL数据绑定到任务名称、站点和任务徽标:

app/src/main/java/com/example/rocketreserver/LaunchList.kt
@Composable
private fun LaunchItem(launch: LaunchListQuery.Launch, onClick: (launchId: String) -> Unit) {
ListItem(
modifier = Modifier.clickable { onClick(launch.id) },
headlineText = {
// Mission name
Text(text = launch.mission?.name ?: "")
},
supportingText = {
// Site
Text(text = launch.site ?: "")
},
leadingContent = {
// Mission patch
AsyncImage(
modifier = Modifier.size(68.dp, 68.dp),
model = launch.mission?.missionPatch,
placeholder = painterResource(R.drawable.ic_placeholder),
error = painterResource(R.drawable.ic_placeholder),
contentDescription = "Mission patch"
)
}
)
}

测试你的查询

构建并运行应用程序,您将看到当前的信息。

Final launch list

如果您向下滚动,您会看到列表中只包含大约20次发射。这是因为发射列表是分页的,您只获取了第一页。

接下来,您将使用基于游标的加载数据系统加载整个发射列表

上一页
5. 将查询连接到您的UI
下一页
7. 分页结果
评价文章评价在GitHub上编辑编辑论坛Discord

©2024Apollo Graph Inc.,贸易名称为Apollo GraphQL。

隐私政策

公司