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

Flutter安卓端NetworkImage网络图片真机无法加载模拟器正常

问题现象
  • 开发场景:安卓平台Flutter食谱搜索应用,当前接入Edamam API,暂未对接Firebase,用户头像使用占位图片
  • 异常表现:应用在安卓模拟器运行时可正常加载网络图片,安装到实体安卓手机后所有网络图片均无法加载
  • 现有图片加载实现代码:
image: DecorationImage(
  image: NetworkImage(query["hits"][index]["recipe"]["image"]),
)
问题产生原因

该问题是模拟器和真机的安卓系统规则差异导致,核心诱因有两个:

  • 网络权限校验规则差异:部分安卓模拟器默认放宽了应用权限校验,即使应用没有主动声明互联网访问权限,也允许发起网络请求;但真机系统会严格执行权限校验,未声明对应权限的应用会被直接禁止访问网络。
  • 明文流量拦截规则差异:安卓9(API级别28)及以上版本默认开启明文流量拦截,禁止应用发起未加密的HTTP请求。Edamam API返回的部分图片链接为HTTP协议,若真机系统版本高于等于安卓9,就会直接拦截这类图片请求;如果模拟器运行的是低于API28的安卓版本,或是默认关闭了明文流量拦截,就不会触发该问题。
解决方法

按照以下步骤逐一配置即可修复:

  1. 添加互联网访问权限
    打开项目路径下的android/app/src/main/AndroidManifest.xml文件,在根节点<manifest>标签内部、<application>标签之前,添加网络权限声明:

    <uses-permission android:name="android.permission.INTERNET" />
    
  2. 配置允许明文流量访问
    还是在上述AndroidManifest.xml文件中,找到<application>标签,新增android:usesCleartextTraffic="true"属性,放开HTTP请求限制,示例配置如下:

    <application
        android:label="你的应用名称"
        android:name="${applicationName}"
        android:icon="@mipmap/ic_launcher"
        android:usesCleartextTraffic="true">
        <!-- 其余原有配置保持不变即可 -->
    </application>
    
  3. 生效配置

    注意:清单文件的改动无法通过热重载/热更新生效,需要先卸载真机上已经安装的旧版应用,再重新执行编译安装操作,新的配置才会生效。

  4. 可选体验优化
    可以替换原生NetworkImage为支持错误兜底、缓存能力的图片加载组件,配置加载中占位、加载失败占位图,避免网络波动、链接失效时出现页面空白或组件报错。

内容的提问来源于stack exchange,提问作者Zaid Ahmed Soomro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 20:03:39