Flutter 常见异常分析

本文深入分析了 Flutter 开发中常见的异常,包括 NoSuchMethodError、Flutter 官方已修复的 bug、StateError 和 NetworkError(DNS)问题,提供了详细的案例和解决方案,帮助开发者更好地理解和处理这些问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在上篇 「Sentry 在百瓶的落地实践」中,笔者主要从方案选型 & 落地实践两个大的方面进行了阐述,本篇文章我们主要对 Sentry 在百瓶的落地实践中遇到的问题进行分析。本文中主要分析的问题主要包括以下几大类(Flutter SDK 版本为 1.22.6,Dart SDK 版本为 2.10.5):

  • NoSuchMethodError
  • Flutter 官方 bug (已经修复)
  • StateError
  • NetworkError(DNS)

NoSuchMethodError

问题一

问题描述:

在进行 List 、String 等类型数据判空处理时,直接使用 xxx.isNotEmpty,没有进行判断是否为 null,导致 NoSuchMethodError:The getter isNotEmpty was called null。

问题截图:

<img src=“https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/860fb4fd0f3148049d2e438d383308a8~tplv-k3u1fbpfcp-zoom-in-crop-mark:1956:0:0:0.image) <img src=“https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/037d0dac18234bd3b73de40a9fdf0fc2~tplv-k3u1fbpfcp-zoom-in-crop-mark:1956:0:0:0.image” style=“margin: auto” /” style=“margin: auto” />

解决方案:

// 问题代码
if(timeEndList.isNotEmpty){...
}
// 解决方案
static bool isNotNullOrEmpty<E>(Iterable<E> iterable) => iterable != null && iterable.isNotEmpty;

if (IterableUtils.isNotNullOrEmpty(timeEndList)){...
} 

在进行判空处理时,需要首先判断是否为 null,然后再使用 isNotEmpty 进行判断,避免这种类型错误,考虑到我们在项目中会使用大量类似判断,所以我们可以对同一类型的数据判断方法进行封装,避免每处使用都要再去写一遍。

问题二

问题描述:

这里是使用了 Future.wait 并发请求多个 API,并且在第二个 API 设置超时,由于第二个 API 请求超时,在后续处理响应时,没有处理空异常判断导致获取不到 code。

问题截图:

<img src=“https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a5f359fcd57a4152986e8a853b7500fc~tplv-k3u1fbpfcp-zoom-in-crop-mark:1956:0:0:0.image) <img src=“https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f85d7d219b99495980cafd89bac3301d~tplv-k3u1fbpfcp-zoom-in-crop-mark:1956:0:0:0.image” style=“margin: auto” /” style=“margin: auto” />

解决方案:

// 问题代码
if (res[1].code == HttpCode.ok) {...
}

// 解决方案
if (res[1]?.code == HttpCode.ok) {...
} 

在使用了 Future.wait 并发请求多个 API ,如果有设置超时处理,要考虑到 API 请求超时失败的问题尽量避免这种问题发生。

问题三

问题描述:

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值