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

Flutter迁移空安全后作为参数传递的Function无法正常执行问题

问题根源

空安全升级后Dart的类型校验规则大幅收紧,原有代码存在3个会触发运行时中断的问题:

  1. 仅捕获了Exception类型的异常,类似类型转换错误CastError这类属于Error类型的异常不会被捕获,会直接终止函数执行
  2. 未做前置类型校验直接用as强转返回结果,类型不匹配时会直接抛出转换错误
  3. 状态码非200/201时try块没有对应返回值,空安全下会触发返回值缺失的隐式错误

解决方案

按如下方式修改handleApi函数即可:

Future<HttpResponse?> handleApi(
  Function function, [
  List<dynamic>? args,
]) async {
  try {
    final dynamic result = await Function.apply(function, args);
    // 先做类型判断再使用,避免强转抛出错误
    if (result is HttpResponse) {
      if (result.response.statusCode == HttpStatus.ok ||
          result.response.statusCode == HttpStatus.created) {
        return result;
      }
    }
    // 类型不匹配或状态码不符合要求时统一返回null
    return null;
  } catch (_) {
    // 捕获所有类型的异常,避免未捕获错误中断执行
    return null;
  }
}

如果你的HttpResponse是强泛型类型,将类型判断条件改为result is HttpResponse<dynamic>即可适配。原有调用逻辑不需要做任何修改。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:36:05