IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> flutter Image.network()网络图片加载失败,404错误的异常处理和解决方法初探 -> 正文阅读

[移动开发]flutter Image.network()网络图片加载失败,404错误的异常处理和解决方法初探

今天碰到一个让人异常头疼的错误:

在使用Image.network()的时候,有个图片网址404了,flutter?真机调试一直卡死,绝对是一个大BUG。

网上找了各种方法:

一:

  Image image = Image(image: new CachedNetworkImageProvider(''));
Image image = Image.network('');
final ImageStream stream = image.image.resolve(ImageConfiguration.empty);
stream.addListener((_, __) {}, onError: (dynamic exception, StackTrace stackTrace) {
  //TODO error callback
});

二:

child: Image.network(
          "https://2a.zol-img.com.cn/product/124_501x2000/746/cexItD2yJ21Rs.jpg",
          loadingBuilder: (context, child, loadingProgress) {
            return loadingProgress == null ? child : LinearProgressIndicator();
          },
        )

还有其他各种各样的方法,全部尝试了一遍,竟然没有一个是能用的。

折腾了几个小时,发现不论怎么try..catch,就是无法捕获异常。

经常分析,很可能是用了dio的缘故。

所以我只好曲线救国,使用如下方法来处理:

首先使用原生的request请求,探测该链接是否有成功的返回值;

其次,如果成功返回,说明图片有效,于是用get设置一个全局参数,例如showAvatar=true;

最后,在需要展示图片的位置使用GetBuilder来决定是否显示头像。

分享部分代码供参考:

 import 'dart:io';
 _getImgTest(url) async {//url为头像链接地址,
    try {
      var request = await httpClient.getUrl(Uri.parse(url));
      var response = await request.close();
      if (response.statusCode == HttpStatus.ok) {  //链接正常则返回HttpStatus.ok
        print('头像加载成功');
        Get.find<LoginController>().showAvatar(true);
        return true;
      } else {
        print("头像加载失败");
        Get.find<LoginController>().showAvatar(false);
        return false;
      }
    } catch (e) {
      print(e);
      Get.find<LoginController>().showAvatar(false);
      return false;
    }
  }
 GetBuilder<LoginController>(
                                      builder: (controller) => controller
                                              .showAvatar
                                          ? Image.network(
                                              //如成功显示用户头像
                                               http://头像地址,
                                              width: 60,
                                              height: 60,
                                            )
                                          : Image.asset(
//失败显示默认图片
                                              "assets/images/user_avatar.png",
                                              width: 60,
                                              height: 60,
                                            )),

虽说多走了几步路,但总归是把问题给解决了。

希望能帮到陷入相同困境的你。

如有更好的解决方案,评论给我,谢谢!

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-11-24 08:03:55  更:2021-11-24 08:05:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:57:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码