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

Flutter升级2.2.2后Future抛出的自定义异常无法被指定类型捕获

问题根因

该问题是Flutter 2.2.2配套的Dart 2.13版本对类型匹配规则收紧导致的,不属于Flutter框架bug,90%以上的场景是自定义异常类的导入方式混用触发的。

常见触发场景

  • 同一个ApiException类,在抛出异常的文件里用相对路径导入,在捕获异常的文件里用package:开头的绝对路径导入,Dart 2.13+会将两种导入方式引入的类判定为不同类型,导致on ApiException无法匹配上抛出的异常实例。
  • 项目中存在多个重名的ApiException类,抛出和捕获时导入的不是同一个类。
  • 部分场景下热重载未完全更新类型缓存,也会偶发该问题。

排查修复步骤

  1. 先在兜底catch块中增加类型校验代码,确认类型是否匹配:
catch(e) {
  print("抛出异常的类型:${e.runtimeType}");
  print("当前文件导入的ApiException类型:$ApiException");
  print("两个类型是否一致:${e.runtimeType == ApiException}");
  rethrow;
}

如果打印的两个类型不一致,即可确认是导入方式问题。
2. 统一所有用到ApiException的文件的导入规则,全部使用package:开头的绝对路径导入,避免相对路径和绝对路径混用。
3. 清理项目缓存后重新编译:执行flutter clean后再运行项目,排除热重载缓存导致的类型异常。

补充说明

Dart 2.13之前的版本对相对/绝对导入的同一个类做了兼容判定,会识别为同一类型,升级后规则收紧,因此会出现在旧版本正常捕获、新版本无法捕获的现象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 07:24:02