返回类型是Future的方法 返回值的类型可以不是Future吗

来源:3-7 扩展hi_net添加对dio的支持

慕先生3072650

2021-11-15

///Dio适配器
class DioAdapter extends HiNetAdapter{
@override
Future<HiNetResponse> send(BaseRequest request) async{
var response,options = Options(headers:request.header);
var error;
try{
if (request.httpMethod() == HttpMethod.GET) {
response = await Dio().get(request.url(), options: options);
} else if (request.httpMethod() == HttpMethod.POST) {
response = await Dio()
.post(request.url(), data: request.params, options: options);
} else if (request.httpMethod() == HttpMethod.DELETE) {
response = await Dio()
.delete(request.url(), data: request.params, options: options);
}
} on DioError catch(e){
error=e;
response=e.response;
}
if(error!=null) {
///抛出HiNetError
throw HiNetError(
response?.statusCode??-1,
error.toString(),
data: buildRes(response,request)
);
}
return buildRes(response, request);
}

///构建HiNetResponse
HiNetResponse buildRes(Response? response, BaseRequest request) {
// return Future.value();
return HiNetResponse(
//?.防止response为空
data: response?.data,
request: request,
statusCode: response?.statusCode,
statusMessage: response?.statusMessage,
extra: response
);
}
}

老师为什么我这个dio适配器的send方法需要返回一个Future包装的对象,但实际上我的send返回的是HiNetResponse也可以跑通呢

写回答

1回答

CrazyCodeBoy

2021-11-16

Future<T>是个泛型,我们在返回的时候要返回泛型T,比如Future<HiNetResponse>则要返回HiNetResponse

0
0

Flutter高级进阶实战-仿哔哩哔哩-掌握Flutter高阶技能

一次性掌握Flutter高阶技能+商业级复杂项目架构设计与开发方案

1722 学习 · 870 问题

查看课程