Jetpack Glance组件预览失败:无法实例化Composition Local
解决Jetpack Glance组件预览失败问题
问题根源
常规Compose的@Preview注解无法适配Glance组件的UI渲染需求。Glance使用专属的Composition Local和Applier系统,普通预览环境未初始化这些依赖,导致渲染时抛出Invalid applier异常。
解决步骤
1. 添加Glance预览依赖
在模块级别的build.gradle.kts(或build.gradle)中添加Glance预览库,确保版本与Glance核心库一致:
dependencies { // Glance核心库(版本需与你的项目保持一致) implementation "androidx.glance:glance-appwidget:1.0.0" // Glance预览专用库(仅Debug环境需要) debugImplementation "androidx.glance:glance-appwidget-preview:1.0.0" }
2. 修改预览代码
替换普通的@Preview为Glance专属的@GlanceAppWidgetPreview注解,并确保预览函数包裹在GlanceTheme中:
package io.github.yamin8000.owl.ui.content.widget import android.content.Context import androidx.compose.runtime.Composable import androidx.glance.GlanceId import androidx.glance.GlanceTheme import androidx.glance.appwidget.GlanceAppWidget import androidx.glance.appwidget.provideContent import androidx.glance.appwidget.preview.GlanceAppWidgetPreview import androidx.glance.text.Text internal class Widget : GlanceAppWidget() { override suspend fun provideGlance(context: Context, id: GlanceId) { provideContent { GlanceTheme { WidgetContent() } } } @Composable fun WidgetContent() { Text("Some Text!") } } // Glance专用预览函数 @GlanceAppWidgetPreview @Composable fun WidgetPreview() { GlanceTheme { WidgetContent() } }
验证
同步项目后,重新打开预览面板,即可正常渲染Glance组件的UI内容。
内容的提问来源于stack exchange,提问作者Yamin Siahmargooei
相关产品推荐
相关产品推荐

