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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:45:42