You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Android Jetpack Glance中加载Flutter资源的问题

在Glance Composable中通过Flutter AssetManager加载资源

你遇到的核心问题是Glance的上下文与应用全局上下文的差异:LocalContext.current是Glance组件专用的受限上下文,无法访问Flutter注册在应用级AssetManager中的资源。以下是修正后的实现方案:

修正代码

@Composable
fun IconImage(modifier: GlanceModifier = GlanceModifier) {
    val assetPath = "assets/test.png"
    // 获取Flutter资源对应的查找键
    val assetLookupKey = FlutterLoader().getLookupKeyForAsset(assetPath)
    // 获取应用全局上下文(而非Glance上下文)
    val appContext = LocalGlanceContext.current.applicationContext
    
    // 缓存bitmap避免重复加载,同时处理资源流和异常
    val bitmap = remember {
        runCatching {
            appContext.assets.open(assetLookupKey).use { inputStream ->
                BitmapFactory.decodeStream(inputStream)
            }
        }.getOrNull()
    }

    bitmap?.let {
        Image(
            provider = ImageProvider(it),
            modifier = modifier,
            contentDescription = null
        )
    }
}

关键说明

  • 使用应用全局上下文:LocalGlanceContext.current.applicationContext能获取到绑定了Flutter AssetManager的应用上下文,这是访问Flutter资源的核心前提。
  • 资源缓存与异常处理:用remember缓存Bitmap,避免Composable重组时重复加载资源;use函数自动关闭输入流,防止资源泄漏;runCatching捕获加载过程中的异常,避免组件崩溃。
  • 前置检查:确保pubspec.yaml中已正确声明该资源,且执行过flutter pub get,保证资源被打包进APK。

内容的提问来源于stack exchange,提问作者Dario Digregorio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 16:39:56