有时可能想检查 Composable 是否正在 @Preview 中渲染/呈现,来判断是显示真实数据还是模拟数据。例如,可以在预览窗口中显示占位符图像而不是显示真实数据。
LocalInspectionMode
是提供是否是可检查模式的 CompositionLocal。如果组合是在 Inspectable 组件内组成的,则为 true。我们可以检查 LocalInspectionMode.current
,如果 Composable 是在预览模式下渲染,它将返回 true。
@Composable
fun GreetingScreen(name: String) {
if (LocalInspectionMode.current) {
// Show this text in a preview window:
Text("Hello preview user!")
} else {
// Show this text in the app:
Text("Hello $name!")
}
}
上例是官方文档中的示例,根据是否是预览来显示不同的文字。
真实开发中文字等信息是可以通过提供测试数据来供预览模式渲染,用它来在预览窗口显示占位符图像使用的更多,因为预览模式是有限制的,不能加载网络和本地文件,真实的网络图片是不能在预览模式加载的。
@Composable
private fun InspectionModeSample() {
Box(Modifier.size(64.dp)) {
if (LocalInspectionMode.current) {
Image(
modifier = Modifier.fillMaxSize(),
imageVector = Icons.Filled.Image,
contentDescription = "Place Holder",
contentScale = ContentScale.Fit,
)
} else {
AsyncImage(
modifier = Modifier.fillMaxSize(),
model = "https://unsplash.com/photos/X7O0-lgHQMo?w=640",
contentDescription = "Image from Internet",
)
}
}
}
AsyncImage
是可以设置placeholder
参数的,它是可以在预览模式渲染的,但是不是所有的地方的需要设置placeholder
的,根据项目需要判断是否需要使用LocalInspectionMode
。