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

Flutter中如何校验网络图片状态 处理图片404加载异常

Flutter 网络图片请求404时自动展示默认图实现方案
  • 优先使用组件内置错误回调实现,性能最优:
    Flutter框架内置的图片组件已经对网络请求状态做了统一处理,只要图片请求返回状态码不是200(包含404、服务端错误、网络超时等所有加载异常场景),都会触发错误回调,不需要额外发起预校验请求浪费流量和加载时间。
    直接使用Image.network构造函数配置errorBuilder参数即可完成兜底逻辑:
Image.network(
  'https://example.com/your-target-image.jpg', // 替换为目标网络图片地址
  width: 200,
  height: 200,
  fit: BoxFit.cover,
  // 加载失败回调,所有异常包括404都会触发
  errorBuilder: (BuildContext context, Object exception, StackTrace? stackTrace) {
    // 返回预设的本地默认图
    return Image.asset(
      'assets/images/default_img.png', // 替换为项目内的默认图资源路径
      width: 200,
      height: 200,
      fit: BoxFit.cover,
    );
  },
)
  • 特殊场景需要单独识别404状态码的实现方式:
    如果业务需要区分404和其他加载错误(比如404展示缺省图、网络超时展示重试按钮),可以先通过HTTP请求获取图片接口的响应状态,判断状态码后再决定加载网络图还是兜底图,注意这种方式会多一次网络请求,会增加加载耗时。
    示例逻辑:
import 'package:http/http.dart' as http;

// 封装返回对应图片Provider的方法
Future<ImageProvider> getImageProvider(String imgUrl) async {
  try {
    final response = await http.get(Uri.parse(imgUrl));
    if (response.statusCode == 200) {
      return NetworkImage(imgUrl);
    } else if (response.statusCode == 404) {
      // 404返回专属默认图资源
      return const AssetImage('assets/images/404_placeholder.png');
    } else {
      // 其他错误返回通用错误占位图
      return const AssetImage('assets/images/error_placeholder.png');
    }
  } catch (e) {
    // 网络异常等错误返回通用占位
    return const AssetImage('assets/images/error_placeholder.png');
  }
}

使用时可以配合FutureBuilder完成渲染:

FutureBuilder<ImageProvider>(
  future: getImageProvider('目标网络图片地址'),
  builder: (context, snapshot) {
    if (snapshot.connectionState == ConnectionState.waiting) {
      return const SizedBox(
        width: 200,
        height: 200,
        child: Center(child: CircularProgressIndicator()),
      );
    }
    return Image(
      image: snapshot.data ?? const AssetImage('assets/images/default_img.png'),
      width: 200,
      height: 200,
      fit: BoxFit.cover,
    );
  },
)

注意:使用本地资源图前,需要先在pubspec.yaml文件中配置对应的assets资源路径,否则会加载失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:45:37