启用Null Safety后出现Future类型不匹配与返回类型错误,求解决方案
解决Dart空安全下Future类型不匹配问题
问题分析
启用空安全后触发两个关联错误:
A value of type Future<dynamic> can't be assigned to a variable of type Future<bool>- 将返回类型改为
Future<dynamic>后,新错误:The return type 'bool' isn't a 'Future<void>', as required by the closure's context
核心问题出在whenComplete的使用逻辑:whenComplete的作用是在Future完成后执行收尾操作,它的回调不需要返回值,空安全下的类型校验会严格检查这一点。你在whenComplete闭包里返回true,导致整个Future的类型被篡改,同时和timeout返回的Future<bool>产生类型冲突。
修复代码
把whenComplete闭包里的return true删除,同时补全变量f的赋值逻辑,修改后代码如下:
final Future<bool> f = c.future.timeout(Duration(seconds: 3), onTimeout: () => false) .whenComplete(() async { await disableBulkDataNotification(); // 移除return true,whenComplete无需返回值 }); bool result = await f; if (!result) { return null; // 失败时返回null }
关键说明
whenComplete的回调类型为FutureOr<void> Function(),只能返回void或Future<void>,返回bool会直接触发类型错误。whenComplete会透传原Future的返回值,不需要手动返回值来影响最终结果。
内容的提问来源于stack exchange,提问作者kayjlou
相关产品推荐
相关产品推荐

