Flutter迁移空安全后作为参数传递的Function无法正常执行问题
问题根源
空安全升级后Dart的类型校验规则大幅收紧,原有代码存在3个会触发运行时中断的问题:
- 仅捕获了
Exception类型的异常,类似类型转换错误CastError这类属于Error类型的异常不会被捕获,会直接终止函数执行 - 未做前置类型校验直接用
as强转返回结果,类型不匹配时会直接抛出转换错误 - 状态码非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
相关产品推荐
相关产品推荐

