request static method

Future<HttpResult> request(
  1. String type,
  2. ResponseType responseType,
  3. String? url,
  4. Map<String, String?>? header,
  5. Uint8List? data,
  6. dynamic callback(
    1. HttpResult result
    ),
)

发送请求*

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;
}