Flutter网络请求
·
1、导入网络插件 dio: ^5.3.4
2、引入插件import ‘package:dio/dio.dart’;
3、代码
/// 下载进度回调
typedef OnDownloadProgress = void Function(double progressPercent); // progressPercent: 0~100
/// 下载成功回调
typedef OnDownloadSuccess = void Function(String filePath);
/// 下载失败回调
typedef OnDownloadError = void Function(Object error, StackTrace? stackTrace);
class NetworkMange {
static final NetworkMange _instance = NetworkMange._internal();
factory NetworkMange() => _instance;
late Dio dio;
NetworkMange._internal() {
BaseOptions options = BaseOptions(
baseUrl: APIUtil.getBaseIpUrl(),
connectTimeout: const Duration(seconds: 60), // 连接超时
receiveTimeout: const Duration(seconds: 40), // 接收超时
headers: {
'Content-Type': 'application/json', // 默认请求头
},
);
dio = Dio(options);
}
Future<void> downloadFile(String url, String filePath, {
OnDownloadProgress? onProgress,
OnDownloadSuccess? onSuccess,
OnDownloadError? onError,
}) async {
try{
await dio.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);
}
}
/*文件上传*/
Future<Response> uploadFile(
String path, {
required FormData data,
Map<String, dynamic>? header,
void Function(int, int)? progress,
}) async {
try {
final options = _mergeHeaders(header);
final response = await dio.post(
path,
data: data,
options: options,
onSendProgress: progress,
);
return response;
} catch (e) {
LogUtil.e('=uploadFile==报错了: $e');
rethrow;
}
}
// 私有方法:合并默认头与自定义头
Options _mergeHeaders(Map<String, dynamic>? customHeaders) {
final mergedHeaders = <String, dynamic>{};
mergedHeaders.addAll(dio.options.headers);
if (customHeaders != null) {
mergedHeaders.addAll(customHeaders);
}
return Options(headers: mergedHeaders);
}
Future<Response> getRequest(
String path, {
Map<String, dynamic>? queryParameters,
Map<String, dynamic>? headers,
}) async {
try {
final options = headers != null ? Options(headers: headers) : null;
final response = await dio.get(
path,
queryParameters: queryParameters,
options: options,
);
return response;
} catch (e) {
LogUtil.e('GET Request Error: ${e}');
rethrow;
}
}
Future<Map<String,dynamic>?> postRequestResponseMap(
String path, {
dynamic data,
Map<String, dynamic>? headers,
}) async {
try {
final options = headers != null ? Options(headers: headers) : null;
LogUtil.d('===options==:$options,path:$path');
final response = await dio.post(path, data: data, options: options);
Map<String, dynamic> jsonMap;
if (response.data is Map<String, dynamic>) {
jsonMap = response.data;
} else if (response.data is String) {
jsonMap = jsonDecode(response.data);
} else {
throw Exception('返回数据报错 response type: ${response.data.runtimeType}');
}
return jsonMap;
} catch (e) {
LogUtil.e('POST Request Error: ${e}');
rethrow;
}
}
//post请求
Future<Response> postRequest(
String path, {
dynamic data,
Map<String, dynamic>? headers,
}) async {
try {
final options = headers != null ? Options(headers: headers) : null;
final response = await dio.post(path, data: data, options: options);
return response;
} catch (e) {
LogUtil.e('POST Request Error: ${e}');
rethrow;
}
}
}
`
更多推荐
所有评论(0)