Flutter网络请求
1、导入网络插件 dio: ^5.3.42、引入插件import ‘package:dio/dio.dart’;3、代码/// 下载进度回调typedefOnDownloadProgressvoidFunction(double progressPercent);// progressPercent: 0~100/// 下载成功回调typedefOnDownloadSuccessvoidFunction(StringfilePath);/// 下载失败回调typedefOnDownloadErrorvoidFunction(Objecterror,StackTrace?stackTrace);classNetworkMange{staticfinalNetworkMange_instanceNetworkMange._internal();factoryNetworkMange()_instance;lateDiodio;NetworkMange._internal(){BaseOptionsoptionsBaseOptions(baseUrl:APIUtil.getBaseIpUrl(),connectTimeout:constDuration(seconds:60),// 连接超时receiveTimeout:constDuration(seconds:40),// 接收超时headers:{Content-Type:application/json,// 默认请求头},);dioDio(options);}FuturevoiddownloadFile(Stringurl,StringfilePath,{OnDownloadProgress?onProgress,OnDownloadSuccess?onSuccess,OnDownloadError?onError,})async{try{awaitdio.download(url,filePath,onReceiveProgress:(received,total){if(total!-1){double progress(received/total)*100;LogUtil.d(下载进度:${progress.toStringAsFixed(2)}%);onProgress?.call(progress);}},deleteOnError:true);onSuccess?.call(filePath);}catch(e,stack){LogUtil.e(错误信息e:$e);onError?.call(e,stack);}}/*文件上传*/FutureResponseuploadFile(Stringpath,{requiredFormDatadata,MapString,dynamic?header,voidFunction(int,int)?progress,})async{try{finaloptions_mergeHeaders(header);finalresponseawaitdio.post(path,data:data,options:options,onSendProgress:progress,);returnresponse;}catch(e){LogUtil.e(uploadFile报错了:$e);rethrow;}}// 私有方法合并默认头与自定义头Options_mergeHeaders(MapString,dynamic?customHeaders){finalmergedHeadersString,dynamic{};mergedHeaders.addAll(dio.options.headers);if(customHeaders!null){mergedHeaders.addAll(customHeaders);}returnOptions(headers:mergedHeaders);}FutureResponsegetRequest(Stringpath,{MapString,dynamic?queryParameters,MapString,dynamic?headers,})async{try{finaloptionsheaders!null?Options(headers:headers):null;finalresponseawaitdio.get(path,queryParameters:queryParameters,options:options,);returnresponse;}catch(e){LogUtil.e(GET Request Error:${e});rethrow;}}FutureMapString,dynamic?postRequestResponseMap(Stringpath,{dynamicdata,MapString,dynamic?headers,})async{try{finaloptionsheaders!null?Options(headers:headers):null;LogUtil.d(options:$optionspath:$path);finalresponseawaitdio.post(path,data:data,options:options);MapString,dynamicjsonMap;if(response.dataisMapString,dynamic){jsonMapresponse.data;}elseif(response.dataisString){jsonMapjsonDecode(response.data);}else{throwException(返回数据报错 response type:${response.data.runtimeType});}returnjsonMap;}catch(e){LogUtil.e(POST Request Error:${e});rethrow;}}//post请求FutureResponsepostRequest(Stringpath,{dynamicdata,MapString,dynamic?headers,})async{try{finaloptionsheaders!null?Options(headers:headers):null;finalresponseawaitdio.post(path,data:data,options:options);returnresponse;}catch(e){LogUtil.e(POST Request Error:${e});rethrow;}}}