如何修复Dio异步请求中FutureOr<Response<dynamic>>返回null的错误?
问题修复:Dart异步函数返回值非空性错误
问题代码
Future<void> clipsAdd(int questionId) async { await _authenticatedRequest((options) async { final String uri = "$domain/clips/add?questionId=$questionId"; final response = await dio.post(uri, options: options); if (response.statusCode != 200) { throw Exception('Failed to process request: ${response.statusCode}'); } }); }
错误信息
The body might complete normally, causing 'null' to be returned, but the return type,
'FutureOr<Response>', is a potentially non-nullable type.
Try adding either a return or a throw statement at the end.
错误原因
传给_authenticatedRequest的匿名函数,因内部调用dio.post(返回Response<dynamic>),Dart会推断该函数返回类型为Future<Response<dynamic>>。但请求成功(状态码200)时,函数无返回值,在空安全规则下会被视为可能返回null,与非空的推断类型冲突,触发错误。
修复方案
方案1:显式指定匿名函数返回类型为Future<void>
如果不需要使用dio.post的返回结果,直接明确函数无需返回值:
Future<void> clipsAdd(int questionId) async { await _authenticatedRequest((BaseOptions options) async { final String uri = "$domain/clips/add?questionId=$questionId"; final response = await dio.post(uri, options: options); if (response.statusCode != 200) { throw Exception('Failed to process request: ${response.statusCode}'); } } as Future<void> Function(BaseOptions)); }
方案2:成功时返回response
若需保留返回response的可能性,或仅为满足类型推断要求,在函数末尾添加返回语句:
Future<void> clipsAdd(int questionId) async { await _authenticatedRequest((options) async { final String uri = "$domain/clips/add?questionId=$questionId"; final response = await dio.post(uri, options: options); if (response.statusCode != 200) { throw Exception('Failed to process request: ${response.statusCode}'); } return response; // 添加返回语句,匹配推断的返回类型 }); }
内容的提问来源于stack exchange,提问作者CodeNewbie
相关产品推荐
相关产品推荐

