uploadFile<T> method
Implementation
Future<Map<String, dynamic>> uploadFile<T>(
{required String resourcePath,
required dynamic data,
Function(Map<String, dynamic>)? onRes}) async {
var request = http.MultipartRequest("POST", Uri.parse(resourcePath));
Map dataMap = data;
for (var aKey in dataMap.keys) {
if (dataMap[aKey] == null) continue;
if (dataMap[aKey] is File) {
File file = dataMap[aKey];
request.files.add(await http.MultipartFile.fromPath(aKey, file.path));
continue;
}
if (dataMap[aKey] is http.MultipartFile) {
http.MultipartFile file = dataMap[aKey];
request.files.add(file);
continue;
}
'$aKey:${dataMap[aKey]}'.printXNetLog();
request.fields[aKey] = dataMap[aKey];
}
formHeaders().forEach((key, value) {
request.headers[key] = value!;
});
resourcePath.printXNetLog();
final respData = <String, dynamic>{};
await request.send().then((response) async {
if (!((response.statusCode < 200) || (response.statusCode >= 300))) {
return response.stream.toStringStream().listen((jsonResult) {
Map<String, dynamic>? resultClass = jsonDecode(jsonResult);
var result = {"succeed": true, "data": resultClass};
if (onRes != null) onRes(result);
return;
});
} else {
var jsonResult = response.stream.toString();
jsonResult.printXNetLog();
var resultClass = {"succeed": false, "data": null};
if (onRes != null) onRes(resultClass);
return resultClass;
}
});
return respData;
}