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

Flutter应用图片在模拟器正常加载,打包APK后手机显示灰块问题

问题排查及解决方案

1. 检查Android网络权限配置

debug模式下Android默认自带网络权限,release包需要手动声明权限,在android/app/src/main/AndroidManifest.xml的<manifest>根标签下添加如下配置:

<uses-permission android:name="android.permission.INTERNET" />

2. 处理HTTP明文流量限制

如果你的图片链接是HTTP协议(非HTTPS),Android 9(API level 28)及以上系统默认禁止明文流量,会导致HTTP资源加载失败,两种解决方案:

  • 优先将图片链接升级为HTTPS协议
  • 如需保留HTTP访问,在AndroidManifest.xml的<application>标签中添加属性:
android:usesCleartextTraffic="true"

3. 补充错误捕获逻辑定位具体问题

现有代码缺少错误回调,无法确认加载失败的具体原因,建议给CachedNetworkImage补充errorWidget参数,打印错误信息方便排查:

CachedNetworkImage(
  imageUrl: url,
  fit: BoxFit.cover,
  placeholder: (_, __) => const Center(child: CupertinoActivityIndicator(radius: 15)),
  // 新增错误回调逻辑
  errorWidget: (context, url, error) {
    print("图片加载失败:$error");
    return const Center(child: Icon(Icons.error, color: Colors.red));
  },
)

4. 修复布局冗余问题

Expanded组件仅可在Row/Column/Flex类型的父组件中使用,你当前的父组件是已经指定了宽高的Container,嵌套Expanded属于无效用法,还可能导致布局约束异常,建议直接移除Expanded包裹:

@override
Widget build(BuildContext context) {
  return Container(
    width: MediaQuery.of(context).size.width,
    height: MediaQuery.of(context).size.height,
    child: CachedNetworkImage(
      // 其余原有参数保持不变
    ),
  );
}

5. 检查release混淆配置

如果你的项目开启了release混淆压缩,确保在android/app/proguard-rules.pro中添加了相关保留规则,避免底层依赖库被混淆删除:

-keep class com.caverock.androidsvg.** { *; }
-keep class com.bumptech.glide.** { *; }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:54:02