使用Dio编写Get请求函数遇'FutureOr<Response>'非可空类型错误求助
解决Dio Get请求的"FutureOr是潜在非空类型"错误
问题原因
你的函数声明返回Future<Response>(不可空类型),但代码仅在try块中返回了Dio请求的结果,catch分支没有返回符合类型要求的值。当触发DioError时,函数没有返回Response类型的结果,Dart空安全机制会判定这个函数可能返回null,因此抛出该错误。
解决方案
以下是几种可行的修复方式,按需选择:
1. 重新抛出异常(推荐)
让错误由调用该函数的上层代码处理,保证函数要么正常返回Response,要么抛出异常,不会出现返回null的情况:
// function for sending get request in the api Future<Response> get(String _path, {Map<String, dynamic>? query}) async { try { String _url = '$_base_url$_path'; Map<String, dynamic> _query = { 'api_key': _api_key, 'language': 'english', }; if (query != null) { _query.addAll(query); } return await dio.get( _url, queryParameters: _query, ); } on DioError catch (e) { print('Unable to perform get request.'); print('DioError: $e'); rethrow; // 重新抛出异常,交给上层处理 } }
2. 修改返回类型为可空
将函数返回类型改为Future<Response?>,明确允许返回null,同时在catch块返回null:
// function for sending get request in the api Future<Response?> get(String _path, {Map<String, dynamic>? query}) async { try { String _url = '$_base_url$_path'; Map<String, dynamic> _query = { 'api_key': _api_key, 'language': 'english', }; if (query != null) { _query.addAll(query); } return await dio.get( _url, queryParameters: _query, ); } on DioError catch (e) { print('Unable to perform get request.'); print('DioError: $e'); return null; // 明确返回null } }
注意:这种方式需要调用该函数的地方处理null的情况。
3. 返回默认的Response实例
如果业务允许,可以在catch块构造一个默认的Response对象返回,保证函数始终返回Response类型:
// function for sending get request in the api Future<Response> get(String _path, {Map<String, dynamic>? query}) async { try { String _url = '$_base_url$_path'; Map<String, dynamic> _query = { 'api_key': _api_key, 'language': 'english', }; if (query != null) { _query.addAll(query); } return await dio.get( _url, queryParameters: _query, ); } on DioError catch (e) { print('Unable to perform get request.'); print('DioError: $e'); // 构造一个默认Response返回,可根据需求调整参数 return Response( requestOptions: RequestOptions(path: _path), statusCode: e.response?.statusCode ?? 500, data: {'error': e.message} ); } }
内容的提问来源于stack exchange,提问作者WonderingDino
相关产品推荐
相关产品推荐

