Flutter加载API返回图片报URI无主机错误的解决方法
问题原因
接口返回的image字段是服务端存储的相对路径,并非带协议头、域名的完整可访问网络URL。直接传入Image.network时,Flutter识别不到合法的HTTP/HTTPS网络URI,会默认按本地file协议解析路径,最终抛出「No host specified in URI」的异常。
修复步骤
- 提前配置项目对应的图片资源访问根域名(例:
https://static.你的项目域名.com/,替换为自身项目实际的资源服务地址即可,建议放在全局配置中统一维护) - 将接口返回的相对路径和根域名拼接为完整的网络图片URL,再传入
Image.network加载 - 增加加载失败兜底逻辑,避免图片地址失效时出现红屏报错
修复后代码示例
首先定义全局图片根地址常量:
// 全局图片资源根地址,替换为项目实际值 const String IMAGE_BASE_URL = "https://替换为你项目的图片服务域名/";
修改ListTile的leading加载逻辑:
ListTile( leading: SizedBox( height: 50, width: 50, child: Image.network( // 拼接得到完整图片访问地址 "$IMAGE_BASE_URL${emergencyContact[index].image}", fit: BoxFit.cover, // 加载失败显示默认占位 errorBuilder: (context, error, stackTrace) { return Container( color: Colors.grey[200], child: const Icon(Icons.person, size: 30, color: Colors.grey), ); }, ), ), // 其余ListTile原有属性保持不变 )
注意事项
- 拼接地址时留意斜杠重复问题:如果根域名末尾带
/,需确认接口返回的相对路径开头没有多余的/,避免生成格式错误的图片地址 - 若接口可能返回空的图片字段,需在拼接前做非空判断,空值直接展示默认占位图即可,避免空指针报错
内容的提问来源于stack exchange,提问作者sarakhan
相关产品推荐
相关产品推荐

