如何手动创建Dart http.Response<T>实例 解决泛型参数声明报错问题
错误原因
官方 http 包提供的 Response 类本身没有泛型参数,你手动为它添加 <MyModel> 泛型声明不符合类的定义,所以会触发编译报错。
解决步骤
- 首先确认你代码里定义返回值
Future<Response<MyModel>>用到的泛型Response<T>的来源:- 如果是Dio等第三方网络库提供的泛型
Response,直接引入对应库的Response类构造实例即可,不要引入官方http包的Response:import 'package:dio/dio.dart'; // 构造Dio的泛型Response var response = Response<MyModel>( data: MyModel.fromJson(data), statusCode: 200, ); - 如果是你项目内自行封装的业务层泛型
Response类,直接调用你封装类的构造方法,将序列化后的字符串、状态码、解析完成的MyModel实例传入即可:// 示例为你自己封装的Response类构造 var response = Response<MyModel>( body: json.encode(data), statusCode: 200, data: MyModel.fromJson(data), );
- 如果是Dio等第三方网络库提供的泛型
- 如果你实际使用的就是官方http包的无泛型
Response,只是需要绑定模型数据做返回,你可以自行封装一层泛型包装类,不要直接修改官方Response的用法:// 自定义泛型包装 class CustomResponse<T> { final Response rawHttpResponse; final T? parsedData; CustomResponse(this.rawHttpResponse, this.parsedData); } // 构造实例 final rawResp = Response(json.encode(data), 200); final response = CustomResponse<MyModel>(rawResp, MyModel.fromJson(data));
按以上方式构造完成的实例就可以直接用在Mockito的模拟返回逻辑中,不需要引入http.testing相关依赖。
内容的提问来源于stack exchange,提问作者user1202032
相关产品推荐
相关产品推荐

