request static method
发送请求*
Implementation
static Future<HttpResult> request(String type,ResponseType responseType,String? url,Map<String, String?>? header,Uint8List? data,Function(HttpResult result) callback) async {
String method="";
if(header!=null){
method=header["Method"].toString();
}
Log.i(tag,"request[$method]:url:$url");
Log.i(tag,"request[$method]:header:$header");
if(TextUtil.isEmpty(url)){
HttpResult httpResult = HttpResult(-1, 0,false, "Server url error",null, null, null, null);
callback(httpResult);
return httpResult;
}
Dio dio=Dio(BaseOptions(
connectTimeout: const Duration(seconds:10), receiveTimeout: const Duration(seconds:10)));
//返回类型
dio.options.responseType = responseType;
//设置请求头
if (header!= null) {
dio.options.headers = header;
}
//结果
bool isSuccess = false;
String msg = "";
int code = -1;
Object? obj;
dynamic result;
List<Object?>? objList;
Headers? headers;
int statusCode=0;
try {
//发送请求
late Response response;
Log.i(tag,"request[$method]:type:$type");
if(type=="POST"){
if(data==null){
HttpResult httpResult = HttpResult(-1, 0,false, "Data empty error",null, null, null, null);
callback(httpResult);
return httpResult;
}
Log.i(tag,"request[$method]:data:${data.length}");
response = await dio.post(
url.toString(),
data: Stream.fromIterable(data.map((e) => [e])),
options: Options(
headers: {
HttpHeaders.contentLengthHeader: data.length,
},
),
);
}else if(type=="GET"){
response = await dio.get(url.toString());
}
Log.i(tag,"request[$method]:statusCode:${response.statusCode}");
statusCode=response.statusCode??0;
if (response.statusCode == 200) {
isSuccess = true;
headers=response.headers;
Log.i(tag,"request[$method]:headers:$headers");
if(responseType==ResponseType.plain){
Log.i(tag,"request[$method]:response.data:${response.data}");
Log.i(tag,"request[$method]:response.data:${response.data.length}");
if(response.data.length>0){
try {
result = json.decode(response.data);
Log.i(tag,"request[$method]:result:$result");
code = result['event'];
msg = result['msg'];
obj = result['obj'];
objList = result['objList'];
Log.i(tag,"request[$method]:code:$code");
Log.i(tag,"request[$method]:msg:$msg");
Log.i(tag,"request[$method]:obj:$obj");
Log.i(tag,"request[$method]:objList:$objList");
}catch(e){
Log.i(tag,"request[$method]:error:$e");
code=0;
msg = response.data;
}
}
}else if(responseType==ResponseType.bytes){
code=0;
obj=response.data;
Log.i(tag,"request[$method]:data:${response.data.length}");
}
} else {
isSuccess=false;
msg = "Network error";
}
} catch (e) {
isSuccess=false;
msg = "Network error";
Log.i(tag,"request[$method]:$e");
if (e is DioError
&&e.response!=null) {
statusCode=e.response!.statusCode==null?0:e.response!.statusCode!;
headers=e.response!.headers;
}
}
HttpResult httpResult = HttpResult(code,statusCode, isSuccess, msg,headers, obj, objList,result);
callback(httpResult);
return httpResult;
}